Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
½áºÏʹÓà MongoDB ºÍ Django
 
×÷Õß Cesar Otero£¬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-10-11
  2650  次浏览      30
 

Ìí¼ÓÒ»¸öÃæÏòÎĵµµÄÊý¾Ý¿â

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 ²Ù×÷¡£ËäÈ»ÕâÖ»ÊǵÚÒ»²½£¬µ«ÊÇÏ£ÍûÄúÏÖÔÚÄܹ»Á˽âÈçºÎ½«´ËÉèÖÃÓ¦Óõ½Äú×Ô¼ºµÄÏîÄ¿ÖС£

   
2650 ´Îä¯ÀÀ       30
Ïà¹ØÎÄÕÂ

»ùÓÚEAµÄÊý¾Ý¿â½¨Ä£
Êý¾ÝÁ÷½¨Ä££¨EAÖ¸ÄÏ£©
¡°Êý¾Ýºþ¡±£º¸ÅÄî¡¢ÌØÕ÷¡¢¼Ü¹¹Óë°¸Àý
ÔÚÏßÉ̳ÇÊý¾Ý¿âϵͳÉè¼Æ ˼·+Ч¹û
 
Ïà¹ØÎĵµ

GreenplumÊý¾Ý¿â»ù´¡Åàѵ
MySQL5.1ÐÔÄÜÓÅ»¯·½°¸
ijµçÉÌÊý¾ÝÖÐ̨¼Ü¹¹Êµ¼ù
MySQL¸ßÀ©Õ¹¼Ü¹¹Éè¼Æ
Ïà¹Ø¿Î³Ì

Êý¾ÝÖÎÀí¡¢Êý¾Ý¼Ü¹¹¼°Êý¾Ý±ê×¼
MongoDBʵս¿Î³Ì
²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿âÉè¼ÆÓëÓÅ»¯
PostgreSQLÊý¾Ý¿âʵսÅàѵ
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

MySQLË÷Òý±³ºóµÄÊý¾Ý½á¹¹
MySQLÐÔÄܵ÷ÓÅÓë¼Ü¹¹Éè¼Æ
SQL ServerÊý¾Ý¿â±¸·ÝÓë»Ö¸´
ÈÃÊý¾Ý¿â·ÉÆðÀ´ 10´óDB2ÓÅ»¯
oracleµÄÁÙʱ±í¿Õ¼äдÂú´ÅÅÌ
Êý¾Ý¿âµÄ¿çƽ̨Éè¼Æ


²¢·¢¡¢´óÈÝÁ¿¡¢¸ßÐÔÄÜÊý¾Ý¿â
¸ß¼¶Êý¾Ý¿â¼Ü¹¹Éè¼ÆÊ¦
HadoopÔ­ÀíÓëʵ¼ù
Oracle Êý¾Ý²Ö¿â
Êý¾Ý²Ö¿âºÍÊý¾ÝÍÚ¾ò
OracleÊý¾Ý¿â¿ª·¢Óë¹ÜÀí


GE Çø¿éÁ´¼¼ÊõÓëʵÏÖÅàѵ
º½Ìì¿Æ¹¤Ä³×Ó¹«Ë¾ Nodejs¸ß¼¶Ó¦Óÿª·¢
ÖÐÊ¢Òæ»ª ׿Խ¹ÜÀíÕß±ØÐë¾ß±¸µÄÎåÏîÄÜÁ¦
ijÐÅÏ¢¼¼Êõ¹«Ë¾ PythonÅàѵ
ij²©²ÊITϵͳ³§ÉÌ Ò×ÓÃÐÔ²âÊÔÓëÆÀ¹À
ÖйúÓÊ´¢ÒøÐÐ ²âÊÔ³ÉÊì¶ÈÄ£Ðͼ¯³É(TMMI)
ÖÐÎïÔº ²úÆ·¾­ÀíÓë²úÆ·¹ÜÀí