Ìí¼ÓÒ»¸öÃæÏòÎĵµµÄÊý¾Ý¿â
Django ÊÇÒ»ÖÖ Python Web ¿ò¼Ü£¬ÓɶÔÏó¹ØÏµÓ³ÉäÆ÷ (ORM)¡¢ºó¶Ë¿ØÖÆÆ÷ºÍÄ£°åϵͳ×é³É¡£MongoDB
ÊÇÒ»ÖÖÃæÏòÎĵµµÄÊý¾Ý¿â£¨Ò²³ÆÎª NoSQL Êý¾Ý¿â£©£¬ÄÜÓÐЧµØ½øÐÐÀ©Õ¹²¢Ìṩ¸ßÐÔÄÜ¡£ÔÚ±¾ÎÄÖУ¬ÎÒÃǽ«Ñ§Ï°ÈçºÎ´Ó
Python µ÷Óà MongoDB£¨Ê¹Óà MongoEngine£©£¬ÒÔ¼°ÈçºÎ½«Ëü¼¯³Éµ½ Django ÏîÄ¿ÖÐÒÔ´úÌæÄÚÖõÄ
ORM¡£±¾ÎÄ»¹°üÀ¨ÓÃÀ´Îª MongoDB ºó¶Ë´´½¨¡¢¶ÁÈ¡ºÍ¸üÐÂÊý¾ÝµÄÑùÀý Web ½çÃæ¡£
Django ÊÇÔÚÒ»¸ö¼«Îª³öÉ«µÄÄ£¿é»¯ÑùʽÖеõ½Ó¦Óõģ»Ìæ»»Ò»¸ö»ùÓÚ Django
µÄ Web Ó¦ÓóÌÐòµÄ²»Í¬×é¼þ·Ç³£¼òµ¥¡£ÓÉÓÚ NoSQL Ŀǰ½ÏΪ³£¼û£¬Äú¿ÉÄÜÏëÒª³¢ÊÔÔËÐÐÒ»¸ö¾ßÓв»Í¬ºó¶Ë¶ø·Ç¾ßÓбê×¼¹ØÏµÊý¾Ý¿â£¨Èç
MySQL?£©µÄÓ¦ÓóÌÐò¡£ÔÚ±¾ÎÄÖУ¬Äú½«³õÌåÑé MongoDB£¬°üÀ¨ÈçºÎʹÓà PyMongo »ò MongoEngine
ÔÚÄúµÄ Python ÏîÄ¿Öе÷ÓÃËü¡£½Ó×Å£¬Äú½«Ê¹Óà Django ºÍ MongoEngine ´´½¨Ò»¸ö¿ÉÖ´Ðд´½¨¡¢¶ÁÈ¡¡¢¸üС¢É¾³ý
(CRUD) ²Ù×÷µÄ¼òµ¥²©¿Í¡£
¹ØÓÚ NoSQL Êý¾Ý¿â
¸ù¾Ý nosql-database.org£¬NoSQL Êý¾Ý¿âÊÇ ¡°ÏÂÒ»´úÊý¾Ý¿â£¬Ö÷Òª¾ßÓÐÒÔϼ¸¸öÒªµã£º·Ç¹ØÏµÐÍ¡¢·Ö²¼Ê½¡¢¿ª·ÅÔ´ÂëºÍ¿ÉˮƽÉìËõ¡±¡£ÃæÏòÎĵµµÄÊý¾Ý¿â
MongoDB ¾ÍÊÇÕâÖÖÀàÐ͵ÄÊý¾Ý¿â¡£
´ÓÒ»ÖÖеĽǶÈÀ´¿´£¬Django 1.3 °üº¬ÁË¶Ô SQLite¡¢MySQL¡¢PostgreSQL
ºÍ Oracle µÄÖ§³Ö£¬µ«ÊDz¢²»°üº¬¶Ô MongoDB µÄÖ§³Ö¡£²»¹ý£¬ÒªÌí¼Ó¶Ô MongoDB µÄÖ§³Ö·Ç³£ÈÝÒ×£¬µ«ÒªÒÔʧȥ×Ô¶¯¹ÜÀíÃæ°åΪ´ú¼Û¡£Òò´Ë£¬Äú±ØÐë¸ù¾ÝÄúµÄÐèÒª½øÐÐȨºâ¡£
MongoDB ¼ò½é
MongoDB ¿ÉÒԳ䵱 JavaScript ½âÊÍÆ÷£¬Òò´ËÊý¾Ý¿â²Ù×÷ÊÇͨ¹ý
JavaScript ÃüÁîÍê³ÉµÄ¡£ÔÚÄúµÄ»úÆ÷Éϱ¾µØ°²×° MongoDB ºó£¨²Î¼û ²Î¿¼×ÊÁÏ£©£¬¿ÉÒÔ³¢ÊÔʹÓÃ
Çåµ¥ 1 ÖÐÁгöµÄһЩÃüÁî¡£
Çåµ¥ 1. Äú¿ÉÒÔ³¢ÊÔ¶Ô MongoDB ʹÓõÄÑùÀý JavaScript
ÃüÁî
var x = "0"; x === 0; typeof({}); |
Äú²»±Ø³ÉΪһÃû JavaScript ר¼ÒÖ®ºó²Å¿ªÊ¼Ê¹Óà MongoDB£»ÕâÀïÌṩ¼¸¸öÓÐÓõĸÅÄ
1.Äú¿ÉÒÔʹÓöÔÏó×ÖÃæÁ¿Óï·¨ (object literal syntax) ´´½¨¶ÔÏ󣬻»¾ä»°Ëµ£¬»áʹÓÃÁ½¸ö»¨À¨ºÅ£¨Èç
var myCollection = {};£©¡£
2.Äú¿ÉÒÔʹÓ÷½À¨ºÅ£¨[]£©À´´´½¨Êý×é¡£
3.³ýÁËÊý×Ö¡¢²¼¶ûÖµ¡¢null ºÍ䶨ÒåÖµÒÔÍ⣬JavaScript ÖÐµÄÆäËûËùÓÐÖµ¶¼ÊÇÒ»¸ö¶ÔÏó¡£
Èç¹ûÄúÏëÒªÁË½â¹ØÓÚ JavaScript ÆäËûÌØÐԵĸü¶àÐÅÏ¢£¬±ÈÈçÔÐ͵ÄÃæÏò¶ÔÏóµÄ±à³Ì (OOP)¡¢·¶Î§¹æÔò£¬¼°Æäº¯Êýʽ±à³ÌÌØÐÔ£¬Çë²ÎÔÄ
²Î¿¼×ÊÁÏ¡£
MongoDB ÊÇÒ»ÖÖÎÞģʽÊý¾Ý¿â£¬Óë¹ØÏµÐÍÊý¾Ý¿âÍêÈ«Ïà·´¡£ÎÞģʽÊý¾Ý¿âûÓÐʹÓñí¸ñ£¬¶øÊÇʹÓÃÓÉÎĵµ×é³ÉµÄ¼¯ºÏ¡£ÕâЩÎĵµÊÇʹÓöÔÏó×ÖÃæÁ¿Óï·¨´´½¨µÄ£¬Èç
Çåµ¥ 2 Ëùʾ¡£
Çåµ¥ 2. Îĵµ´´½¨Ê¾Àý
var person1 = {name:"John Doe", age:25}; var person2 = {name:"Jane Doe", age:26, dept: 115}; |
ÏÖÔÚ£¬ÇëÖ´ÐÐ Çåµ¥ 3 ÖÐËùʾµÄÃüÁîÀ´´´½¨Ò»¸öм¯ºÏ¡£
Çåµ¥ 3. ´´½¨¼¯ºÏ
db.employees.save(person1); db.employees.save(person2); |
ÓÉÓÚ MongoDB ¾ßÓÐÎÞÄ£Ê½ÌØÐÔ£¬ËùÒÔ person1 ºÍ person2 ²»±Ø¾ßÓÐÏàͬµÄÁÐÀàÐÍ£¬ÉõÖÁ²»±ØÓµÓÐÏàͬµÄÁбàºÅ¡£²¢ÇÒ£¬MongoDB
±¾Éí¾ßÓж¯Ì¬ÌØÐÔ£¬ËùÒÔËü»á´´½¨ employees ¶ø²»ÊÇÅ׳öÒ»¸ö´íÎó¡£Äú¿ÉÒÔͨ¹ý find() ·½·¨¼ìË÷Îĵµ¡£Òª»ñÈ¡
employees ÖеÄËùÓÐÎĵµ£¬¿ÉÒÔÖ±½Óµ÷Óà find()£¬ÎÞÐèʹÓÃÈκβÎÊý£¬Èç Çåµ¥ 4 Ëùʾ¡£
Çåµ¥ 4. Ò»¸ö¼òµ¥µÄ MongoDB ²éѯ
> db.employees.find();
// returns
[
{ "_id" : { "$oid" : "4e363c4dcc93747e68055fa1" },
"name" : "John Doe", "age" : 25 },
{ "_id" : { "$oid" : "4e363c53cc93747e68055fa2" },
"name" : "Jane Doe", "dept" : 115, "age" : 26 }
] |
×¢Ò⣬_id µÈЧÓÚÒ»¸öÖ÷¼ü¡£ÒªÔËÐоßÌåµÄ²éѯ£¬ÔòÐèҪʹÓüü/Öµ¶Ô´«µÝÁíÒ»¸ö¶ÔÏóÀ´Ö¸Ê¾ÄúËùÒª²éѯµÄÄÚÈÝ£¬Èç
Çåµ¥ 5 Ëùʾ¡£
Çåµ¥ 5. ͨ¹ýÒ»¸öËÑË÷²ÎÊý½øÐвéѯ
> db.employees.find({name: "John Doe"});
// returns
[
{ "_id" : { "$oid" : "4e363c4dcc93747e68055fa1" },
"name" : "John Doe", "age" : 25 }
]
|
Òª²éѯÄêÁä´óÓÚ 25 ËêµÄÔ±¹¤£¬ÇëÖ´ÐÐ Çåµ¥ 6 ÖеÄÃüÁî¡£
Çåµ¥ 6. ²éѯÄêÁä´óÓÚ 25 ËêµÄÔ±¹¤
> db.employees.find({age:{'$gt':25}});
// returns
[
{ "_id" : { "$oid" : "4e363c53cc93747e68055fa2" },
"name" : "Jane Doe", "dept" : 115, "age" : 26 }
]
|
$gt ÊÇÒ»¸öÌØÊâ²Ù×÷·û£¬±íʾ´óÓÚ¡£±í 1 ÁгöÁËÆäËûÐÞÊηû¡£
±í 1. ¿ÉÒÔ¶Ô MongoDB ʹÓõÄÐÞÊηû

µ±È»£¬ÄúÒ²¿ÉÒÔʹÓà update() ·½·¨¸üмǼ¡£Äú¿ÉÒÔ¸üÐÂÕûÌõ¼Ç¼£¬Èç Çåµ¥ 7 Ëùʾ¡£
Çåµ¥ 7. ¸üÐÂÕûÌõ¼Ç¼
> db.employees.update({ name:"John Doe", // Document to update {name:"John Doe", age:27} // updated document }); |
´ËÍ⣬Äú»¹¿ÉÒÔʹÓà $set ²Ù×÷·û½ö¸üÐÂÒ»¸öÖµ£¬Èç Çåµ¥ 8 Ëùʾ¡£
Çåµ¥ 8. ½ö¸üмǼÖеÄÒ»¸öÖµ
> db.employees.update({name:"John Doe", { '$set': {age:27} } }); |
ÒªÇå¿Õ¼¯ºÏ£¬¿ÉÒÔµ÷Óà remove() ·½·¨£¬ÎÞÐèʹÓÃÈκβÎÊý¡£ÀýÈ磬Èç¹ûÄúÏëÒª´Ó employees
¼¯ºÏÖÐÒÆ³ý John Doe£¬ÄÇôÄú¿ÉÒÔÖ´ÐÐ Çåµ¥ 9 ËùʾµÄ²Ù×÷¡£
Çåµ¥ 9. ´Ó employees ¼¯ºÏÖÐÒÆ³ý John Doe
> db.employees.remove({"name":"John Doe"}); > db.employees.find(); // returns [ { "_id" : { "$oid" : "4e363c53cc93747e68055fa2" }, "name" : "Jane Doe", "dept" : 115, "age" : 26 } ] |
´ËÄÚÈݶÔÓÚ¸Õ¿ªÊ¼Ê¹Óà MongoDB µÄÄúÀ´ËµÒѾ×ã¹»ÁË¡£µ±È»£¬Äú¿ÉÒÔ¼ÌÐøä¯ÀÀ¹Ù·½ÍøÕ¾£¬¸ÃÍøÕ¾ÌṩÁ˼ò½àµÄ¡¢»ùÓÚ
Web µÄ½»»¥Ê½ mongodb ÃüÁîÌáʾ·û£¬ÒÔ¼°Ö¸ÄϺ͹ٷ½Îĵµ¡£Çë²ÎÔÄ ²Î¿¼×ÊÁÏ¡£
½« Django Óë MongoDB ¼¯³É
Óм¸¸ö´Ó Python »ò Django ·ÃÎÊ MongoDB µÄÑ¡Ïî¡£µÚÒ»¸öÑ¡ÏîÊÇʹÓà Python
Ä£¿é£¬¼´ PyMongo¡£Çåµ¥ 10 ÊÇÒ»¸ö¼òµ¥µÄ PyMongo »á»°£¬¼ÙÉèÄúÒѾ°²×°ÁË MongoDB£¬²¢ÇÒÒѾӵÓÐÒ»¸öÔÚ¶Ë¿ÚÉÏÔËÐеÄʵÀý¡£
Çåµ¥ 10. ÑùÀý PyMongo »á»°
from pymongo import Connection
databaseName = "sample_database"
connection = Connection()
db = connection[databaseName]
employees = db['employees']
person1 = { "name" : "John Doe",
"age" : 25, "dept": 101, "languages":["English","German","Japanese"] }
person2 = { "name" : "Jane Doe",
"age" : 27, "languages":["English","Spanish","French"] }
print "clearing"
employees.remove()
print "saving"
employees.save(person1)
employees.save(person2)
print "searching"
for e in employees.find():
print e["name"] + " " + unicode(e["languages"])
|
PyMongo ÔÊÐíÄúͬʱÔËÐжà¸öÊý¾Ý¿â¡£Òª¶¨ÒåÒ»¸öÁ¬½Ó£¬Ö»Ð轫Êý¾Ý¿âÃû×Ö´«µÝ¸øÁ¬½ÓʵÀý¡£ÔÚ±¾ÀýÖУ¬Python
´Êµä´úÌæÁË JavaScript ¶ÔÏó×ÖÃæÁ¿À´´´½¨ÐÂÎĵµ¶¨Ò壬¶ø Python Áбí´úÌæÁË JavaScript
Êý×é¡£find ·½·¨»á·µ»ØÒ»¸öÄú¿ÉÒÔ½øÐеü´úµÄÊý¾Ý¿âÓαê¶ÔÏó¡£
Óï·¨µÄ¼òÒ×ÐÔʹ MongoDB ÃüÁîÐÐÓë°üº¬ PyMongo µÄÔËÐÐÃüÁîÖ®¼äµÄÇл»±äµÃÈÝÒס£ÀýÈ磬Çåµ¥
11 չʾÁËÈçºÎʹÓà PyMongo ÔËÐÐÒ»¸ö²éѯ¡£
Çåµ¥ 11. ʹÓà PyMongo ÔËÐÐÒ»¸ö²éѯ
for e in employees.find({"name":"John Doe"}): print e |
Äú´Ó Python µ÷Óà MongoDB µÄÁíÒ»¸öÑ¡ÏîÊÇ MongoEngine£¬Èç¹ûÄúʹÓùý Django
µÄÄÚÖà ORM£¬ÄÇôÄú¶Ô´ËÓ¦¸Ã¸Ðµ½·Ç³£ÊìϤ¡£MongoEngine ÊÇÒ»¸öÎĵµµ½¶ÔÏóµÄÓ³ÉäÆ÷£¬´Ó¸ÅÄîÉÏ˵£¬ËüÓëÓ³Éäµ½
ORM µÄÓ³ÉäÆ÷ÀàËÆ¡£Çåµ¥ 12 ÏÔʾÁËÒ»¸öʹÓà MongoEngine µÄʾÀý»á»°¡£
Çåµ¥ 12. MongoEngine ʾÀý»á»°
from mongoengine import *
connect('employeeDB')
class Employee(Document):
name = StringField(max_length=50)
age = IntField(required=False)
john = Employee(name="John Doe", age=25)
john.save()
jane = Employee(name="Jane Doe", age=27)
jane.save()
for e in Employee.objects.all():
print e["id"], e["name"], e["age"]
|
Employee ¶ÔÏó¼Ì³Ð×Ô mongoengine.Document¡£ÔÚ±¾Ê¾ÀýÖУ¬Ê¹ÓÃÁËÁ½ÖÖ×Ö¶ÎÀàÐÍ£ºStringField
ºÍ IntField¡£Óë Django µÄ ORM ÏàËÆ£¬ÒªÍ¨¹ý²éѯ»ñµÃ¼¯ºÏÖеÄËùÓÐÎĵµ£¬Çëµ÷Óà Employee.objects.all()¡£Çë×¢Ò⣬Ҫ·ÃÎÊΩһµÄ¶ÔÏó
ID£¬ÇëʹÓà "id" ¶ø·Ç "_id"
Ò»¸öÑùÀý²©¿Í
ÏÖÔÚÒª´´½¨Ò»¸öÃûΪ Blongo µÄ¼òµ¥²©¿Í¡£Äú½«Ê¹Óà Python 1.7¡¢Django 1.3¡¢MongoDB
1.8.2¡¢MongoEngine 0.4 ºÍ Hypertext Markup Language (HTML)
5¡£Èç¹ûÄúÏëÒªÖØÏÖÎҵľ«È·ÉèÖã¬ÎÒϰ¹ßʹÓà Ubuntu Linux ºÍ FireFox¡£Blongo
ÔÚÍøÒ³¼ÓÔØºó¾Í»áÏÔʾËùÊäÈëµÄËùÓв©¿ÍÌõÄ¿£¬²¢ÇÒÔÊÐí¶ÔÈκÎÌõĿִÐиüкÍɾ³ý²Ù×÷£¬»»¾ä»°Ëµ£¬ÔÊÐí½øÐÐËùÓеıê×¼
CRUD ²Ù×÷¡£Django ÊÓͼӵÓÐÈý¸ö·½·¨£ºindex¡¢update ºÍ delete¡£
²ãµþÑùʽ±í (CSS) ¶¨Òå±»ÒýÈëÒ»¸öµ¥¶ÀµÄ¾²Ì¬Îļþ¡£Ïà¹ØÄÚÈÝÎÒ²»ÏëÔÚ´Ë´¦×¸Êö£¬Äú¿ÉÒÔËæÒâä¯ÀÀ ÏÂÔØ
²¿·ÖÖаüº¬µÄÔ´´úÂë¡£
¼ÙÉèÒѰ²×°ºÃËùÐèµÄËùÓй¤¾ß£¬²¢ÇÒÕâЩ×é¼þ¶¼ÄÜÁ¼ºÃÔËÐУ¬ÄÇôÇë´´½¨Ò»¸öÐ嵀 Django ÏîÄ¿ºÍ±ØÒªµÄ×é¼þ£¬Èç
Çåµ¥ 13 Ëùʾ¡£
Çåµ¥ 13. ´´½¨ Django ²©¿ÍÏîÄ¿µÄÃüÁî
$ django-admin.py startproject blongo $ cd blongo $ django-admin.py startapp blogapp $ mkdir templates $ cd blogapp $ mkdir static |
Django 1.3 µÄÐÂÔöÄÚÈÝÊÇÒ»¸öÒѰüº¬ÔÚ Django ÖеűÏ×ÐÍÓ¦ÓóÌÐò£¬¿ÉʹÓÃËüÀ´¸Ä½ø¾²Ì¬ÎļþµÄ´¦Àí¡£Í¨¹ýÏòÈκÎÓ¦ÓóÌÐòĿ¼Ìí¼ÓÒ»¸ö¾²Ì¬Ä¿Â¼£¨ÀýÈ磬±¾ÀýÖеÄ
blogapp£©²¢È·±£ django.contrib.staticfiles °üº¬ÔÚÒѰ²×°Ó¦ÓóÌÐòÖУ¬Django
¿ÉÒÔ²éÕÒµ½ÖîÈç .css ºÍ .js µÄ¾²Ì¬Îļþ£¬¶øÎÞÐèʹÓÃÆäËûÈκη½·¨¡£Çåµ¥ 14 ÏÔʾÁËÉèÖÃÎļþµÄ´úÂëÐУ¬ÕâЩ´úÂëÐÐÒѾ½øÐÐÁËÏàÓ¦Ð޸ģ¨À´×ÔĬÈϵÄ
settings.py Îļþ£©£¬Ê¹²©¿ÍÓ¦ÓóÌÐòÄܹ»Õý³£ÔËÐС£
Çåµ¥ 14. ÒѸıäµÄÉèÖÃÎļþ´úÂëÐУ¨À´×ÔĬÈ쵀 settings.py Îļþ£©
# Django settings for blog project.
import os
APP_DIR = os.path.dirname( globals()['__file__'] )
DBNAME = 'blog'
TEMPLATE_DIRS = (
os.path.join( APP_DIR, 'templates' )
)
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog.blogapp',
)
|
±¾ÏîÄ¿ÖÐÒ²ÓÐÈý¸öÄ£°å£ºindex.html¡¢update.html ºÍ delete.html¡£Çåµ¥
15 ÏÔʾÁËÕâÈý¸öÄ£°åÎļþµÄ´úÂë¡£
Çåµ¥ 15. index.html¡¢update.html ºÍ delete.html Ä£°åÎļþµÄ´úÂë
<!-- index.html --> <!DOCTYPE html> <html> <head> <link href="{{STATIC_URL}}blog.css" rel="stylesheet" type="text/css"> </head> <body> <h1>Blongo</h1> <form method="post" action="http://127.0.0.1:8000/"> {% csrf_token %} <ul> <li> <input type="text" name="title" placeholder="Post Title" required> </li> <li> <textarea name="content" placeholder="Enter Content" rows=5 cols=50 required> </textarea> </li> <li> <input type="submit" value="Add Post"> </li> </ul> </form> <!-- Cycle through entries --> {% for post in Posts %} <h2> {{ post.title }} </h2> <p>{{ post.last_update }}</p> <p>{{ post.content }}</p> <form method="get" action="http://127.0.0.1:8000/update"> <input type="hidden" name="id" value="{{ post.id }}"> <input type="hidden" name="title" value="{{ post.title }}"> <input type="hidden" name="last_update" value="{{ post.last_update }}"> <input type="hidden" name="content" value="{{ post.content }}"> <input type="submit" name="" value="update"> </form> <form method="get" action="http://127.0.0.1:8000/delete"> <input type="hidden" name="id" value="{{post.id}}"> <input type="submit" value="delete"> </form> {% endfor %} </body> </html>
<!-- update.html -->
<!DOCTYPE html>
<html>
<head>
<link href="{{STATIC_URL}}blog.css"
rel="stylesheet" type="text/css">
</head>
<body>
<h1>Blongo - Update Entry</h1>
<form method="post" action="http://127.0.0.1:8000/update/">
{% csrf_token %}
<ul>
<li><input type="hidden" name="id"
value="{{post.id}}"></li>
<li>
<input type="text" name="title"
placeholder="Post Title"
value="{{post.title}}" required>
<input type="text" name="last_update"
value="{{post.last_update}}" required>
</li>
<li>
<textarea name="content" placeholder="Enter
Content"
rows=5 cols=50 required>
{{post.content}}
</textarea>
</li>
<li>
<input type="submit" value="Save
Changes">
</li>
</ul>
</form>
</body>
</html>
<!-- delete.html -->
<!DOCTYPE html>
<html>
<head>
<link href="{{STATIC_URL}}blog.css"
rel="stylesheet" type="text/css">
</head>
<body>
<h1>Blongo - Delete Entry</h1>
<form method="post" action="http://127.0.0.1:8000/delete/">
{% csrf_token %}
<input type="hidden" name="id"
value="{{id}}">
<p>Are you sure you want to delete this
post?</p>
<input type="submit" value="Delete">
</form>
</body>
</html> |
½Ó×Å£¬¸ü¸Ä Çåµ¥ 16 ÖÐËùʾ´úÂëµÄ URL Ó³É䣬¸ÃÓ³ÉäÖ¸ÏòË÷Òý¡¢¸üкÍɾ³ýµÄÊÓͼ¡£Äú¿ÉÄÜÏëÈÃÑùÀý²©¿Í´´½¨ÐµIJ©¿ÍÌõÄ¿£¨ÔÚË÷ÒýÖУ©¡¢¸üÐÂÏÖÓв©¿ÍÌû×Ó£¬²¢ÔÚÏëҪɾ³ýÕâЩÌû×ÓµÄʱºòɾ³ýËüÃÇ¡£Ã¿¸ö²Ù×÷¶¼ÊÇͨ¹ýÏòÌØ¶¨
URL ·¢ËÍÒ»¸öÇëÇóÀ´Íê³ÉµÄ¡£
Çåµ¥ 16. Ë÷Òý¡¢¸üкÍɾ³ýµÄÓ³Éä
from django.conf.urls.defaults import patterns, include, url
urlpatterns = patterns('',
url(r'^$', 'blog.blogapp.views.index'),
url(r'^update/', 'blog.blogapp.views.update'),
url(r'^delete/', 'blog.blogapp.views.delete'),
)
|
×¢Ò⣬ÄúÎÞ ÐèÔËÐÐ syncdb Django ÃüÁî¡£Òª½« MongoDB ¼¯³Éµ½ÄúµÄÓ¦ÓóÌÐòÖУ¬Ö»ÐèʹÓÃ
MongoEngine ¼´¿É¡£ÔÚ blogapp Ŀ¼µÄ models.py ÎļþÖУ¬Ìí¼Ó Çåµ¥ 17
ÖÐËùʾµÄ´úÂë¡£
Çåµ¥ 17. ÔÚÊý¾Ý²ãÖаüº¬ MongoEngine
from mongoengine import *
from blog.settings import DBNAME
connect(DBNAME)
class Post(Document):
title = StringField(max_length=120, required=True)
content = StringField(max_length=500, required=True)
last_update = DateTimeField(required=True)
|
Êý¾Ý¿âÃû³ÆÊÇÔ´×ÔÉèÖÃÎļþ£¬ÓÃÓÚ·Ö¸ô¹Ø×¢µã¡£Ã¿¸ö²©¿ÍÌû×Ó¶¼°üº¬Èý¸ö±ØÒªµÄ×ֶΣºtitle¡¢content
ºÍ last_update¡£Èç¹ûÄú½«´ËÇåµ¥ÓëÄúͨ³£ÔÚ Django »ñµÃµÄÇåµ¥½øÐжԱȣ¬¾Í»á·¢ÏÖËüÃDzî±ð²¢²»´ó¡£´ËÇ嵥ʹÓÃÁË
mongoengine.Document À࣬¶ø·Ç´Ó django.db.models.Model Öм̳еÄÀà¡£ÔÚÕâÀÎÒ²¢²»´òËãÉîÈë̽ÌÖÊý¾ÝÀàÐÍÖ®¼äµÄ²î±ð£¬µ«Äú¿ÉÒÔËæÒâ²é¿´
MongoEngine Îĵµ£¨²Î¼û ²Î¿¼×ÊÁÏ£©¡£
±í 2 ÁгöÁË MongoEngine ×Ö¶ÎÀàÐÍ£¬²¢ÏÔʾÁË¶ÔµÈµÄ Django ORM ×Ö¶ÎÀàÐÍ£¨Èç¹û´æÔڵϰ£©¡£
±í 2. MongoEngine ×Ö¶ÎÀàÐÍºÍ Django ORM ¶ÔµÈÎï

×îºó£¬Äú¿ÉÒÔ´´½¨×Ô¼ºµÄÊÓͼ¡£ÔÚÕâÀÄúÓµÓÐÈý¸öÊÓͼ·½·¨£ºindex¡¢update ºÍ delete¡£ÒªÖ´ÐÐÏëÒªÖ´ÐеIJÙ×÷£¬Ôò±ØÐëÏòÌØ¶¨
URL ·¢ËÍÒ»¸öÇëÇó¡£ÀýÈ磬Ҫ¸üÐÂÒ»¸öÎĵµ£¬Ôò±ØÐëÏò localhost:8000/update ·¢ËÍÒ»¸öÇëÇó¡£Ö´ÐÐÒ»¸ö
http 'GET' ÇëÇó²»»áÖ´Ðб£´æ¡¢¸üеȲÙ×÷¡£Ð²©¿ÍÌû×ÓÊÇ´ÓË÷ÒýÊÓͼ²åÈëµÄ¡£Çåµ¥ 18 ÏÔʾÁËË÷Òý¡¢¸üкÍɾ³ýÊÓͼµÄʵÏÖ¡£
Çåµ¥ 18. Django ÊÓͼ
from django.shortcuts import render_to_response from django.template import RequestContext from models import Post import datetime
def index(request):
if request.method == 'POST':
# save new post
title = request.POST['title']
content = request.POST['content']
post = Post(title=title)
post.last_update = datetime.datetime.now()
post.content = content
post.save()
# Get all posts from DB
posts = Post.objects
return render_to_response('index.html', {'Posts':
posts},
context_instance=RequestContext(request))
def update(request):
id = eval("request." + request.method
+ "['id']")
post = Post.objects(id=id)[0]
if request.method == 'POST':
# update field values and save to mongo
post.title = request.POST['title']
post.last_update = datetime.datetime.now()
post.content = request.POST['content']
post.save()
template = 'index.html'
params = {'Posts': Post.objects}
elif request.method == 'GET':
template = 'update.html'
params = {'post':post}
return render_to_response(template, params, context_instance=RequestContext(request))
def delete(request):
id = eval("request." + request.method
+ "['id']")
if request.method == 'POST':
post = Post.objects(id=id)[0]
post.delete()
template = 'index.html'
params = {'Posts': Post.objects}
elif request.method == 'GET':
template = 'delete.html'
params = { 'id': id }
return render_to_response(template, params,
context_instance=RequestContext(request)) |
Äú¿ÉÄÜÒѾעÒâµ½ÓÃÀ´Ë÷ÒýÎĵµ ID µÄ eval Óï¾ä¡£Ê¹ÓøÃÓï¾äÊÇΪÁ˱ÜÃâ±àд Çåµ¥ 19 ÖÐËùʾµÄ
if Óï¾ä¡£
Çåµ¥ 19. ¼ìË÷Îĵµ ID µÄÌæ´ú·½·¨
if request.method == 'POST': id = request.POST['id'] elif request.method == 'GET': id = request.GET['id'] |
ÄúÒ²¿ÉÒÔÕâÑù±àд´úÂë¡£ÒÔÉϾÍÊÇ´´½¨²¢ÔËÐÐÒ»¸ö¼òµ¥²©¿ÍÐèÒªÖ´ÐеÄËùÓвÙ×÷¡£ÏÔÈ»£¬×îÖÕ²úÆ·Öл¹»áÌí¼ÓÐí¶à×é¼þ£¬±ÈÈçÓû§¡¢µÇ¼¡¢±êÇ©µÈ¡£
½áÊøÓï
ÕýÈçÄúËù¿´µ½µÄ£¬´Ó Django µ÷Óà MongoDB ÕæµÄ²»ÊǺܸ´ÔÓ¡£ÔÚ±¾ÎÄÖУ¬ÎÒ¼òµ¥½éÉÜÁËһϠMongoDB£¬²¢½âÊÍÁËÈçºÎ·ÃÎÊËü£¬ÒÔ¼°ÈçºÎͨ¹ý
PyMongo °ü×°Æ÷ºÍ MongoEngine µÄ ¡°¶ÔÏóÖÁÎĵµ¡± Ó³ÉäÆ÷£¬´Ó Python ²Ù×÷ MongoDB
µÄ¼¯ºÏºÍÎĵµ¡£×îºó£¬ÎÒ¿ìËÙÑÝʾÁËÈçºÎʹÓà Django Ö´Ðлù´¡ CRUD ²Ù×÷¡£ËäÈ»ÕâÖ»ÊǵÚÒ»²½£¬µ«ÊÇÏ£ÍûÄúÏÖÔÚÄܹ»Á˽âÈçºÎ½«´ËÉèÖÃÓ¦Óõ½Äú×Ô¼ºµÄÏîÄ¿ÖС£
|