ÈçÎÒÃÇËù˵£¬ÊÔͼ¸ºÔðÂß¼ºÍ·µ»ØÓ¦´ð£¬Àý×ÓÖÐÎÒÃǼÆËãÁ˵±Ç°µÄÈÕÆÚºÍʱ¼ä
ÏÖÔÚµÄWeb³ÌÐòÖг£³£ºÍÊý¾Ý¿â´ò½»µÀ
Ò»¸öÊý¾Ý¿âÇý¶¯µÄÍøÕ¾ÔÚºǫ́Á¬½ÓÊý¾Ý¿â·þÎñÆ÷£¬µÃµ½²¢ÏÔʾºÜºÃµÄ¸ñʽ»¯µÄWebÒ³Ãæ
ͬÑù£¬ÍøÕ¾Ò²¿ÉÒÔÌṩ¸ø·ÃÎÊÕßÒ²¾ßÓвÙ×÷Êý¾Ý¿âµÄ¹¦ÄÜ
Ðí¶à¸´ÔÓµÄÍøÕ¾ÒÔÉÏÁ½ÖÖ¹¦ÄܵĽáºÏ£¬ÈçAmazon.com¾ÍÊÇÒ»¸öÊý¾Ý¿âÇý¶¯µÄÕ¾µã
ÿһ¸ö²úÆ·Ò³Ãæ¶¼ÊÇAmazonÊý¾Ý¿â¸ñʽºóµÄHTML£¬Äã·ÃÎÊÒ³ÃæÒ²¾ÍÊǼä½Ó·ÃÎÊÊý¾Ý¿â
DjangoºÜÊʺÏÊý¾Ý¿âÇý¶¯µÄÍøÕ¾£¬Í¨¹ýPythonËüÌṩǿ´óµÄÊý¾Ý¿â·ÃÎÊÄÜÁ¦
ÕâÕ½«½²ÊöDjangoµÄÊý¾Ý¿â²ã
ÔÚÊÓͼÀï½øÐÐÊý¾Ý¿â²éѯµÄ“ÑÆ”·½Ê½
ǰһÕ½²µ½Í¨¹ýÔÚÊÓͼÀïÓ²±àÂëHTMLÀ´Êä³öHTMLµÄ“ÑÆ”·½Ê½£¬ÔÚÊÓͼÀïÒ²Óеõ½Êý¾Ý¿âÊý¾ÝµÄ“ÑÆ”·½Ê½
ÕâºÜ¼òµ¥£¬Ö»ÊÇʹÓÃһЩPython¿âÖ´ÐÐSQL²éѯ²¢ÇÒ´¦Àí½á¹û
ÔÚÏÂÃæµÄÀý×ÓÀïÎÒÃÇʹÓÃMySQLdb¿â(¿ÉÒÔÔÚÈçϵØÖ·µÃµ½http://sourceforge.net/projects/mysql-python)
À´Á¬½ÓMySQLÊý¾Ý¿â£¬µÃµ½Ò»Ð©¼Ç¼À´Ìî³äÄ£°å£¬²¢ÏÔʾµ½WebÒ³ÃæÉÏ£º
- from django.shortcuts import render_to_response
- import MySQLdb
- def book_list(request):
- db = MySQLdb.connect(user='me', db='mydb', passwd='secret', host='localhost')
- cursor = db.cursor()
- cursor.execute('SELECT name FROM books ORDER BY name')
- names = [row[0] for row in cursor.fetchall()]
- db.close()
- return render_to_response('book_list.html', {'names': names})
Õâ¸ö·½·¨¿ÉÒÔ¹¤×÷£¬µ«ÊÇÂíÉÏһЩÎÊÌâ³öÀ´ÁË£º
1£¬ÎÒÃǰÑÊý¾Ý¿âÁ¬½ÓµÄ²ÎÊýÓ²±àÂëµ½´úÂëÀïÃæÁË£¬ÀíÏë×´¿öÏÂËüÃÇÓ¦¸Ã´æ´¢ÔÚDjangoÅäÖÃÀïÃæ
2£¬ÎÒÃDZØÐëдһЩÑù°åÎļþ´úÂ룬È罨Á¢Á¬½Ó£¬´´½¨cursor£¬Ö´ÐÐÓï¾äºÍ¹Ø±ÕÁ¬½ÓµÈ
ϸÏë×´¿öÏ£¬ÎÒÃÇÓ¦¸ÃÖ»ÐèÖ¸³öÎÒÃÇÐèҪʲô½á¹û
3£¬Ëü°ÑÎÒÃǺÍMySQL°óÔÚÒ»Æð£¬Èç¹ûÎÒÃÇÏëÇл»µ½PostgreSQL
ÎÒÃDZØÐëʹÓò»Í¬µÄÊý¾Ý¿âÊÊÅäÆ÷psycopg£¬¸Ä±äÊý¾Ý¿âÁ¬½Ó²ÎÊýÒÔ¼°¿¼ÂÇÖØÐ´SQLÓï¾ä
ÀíÏë×´¿öÏÂÊý¾Ý¿â·þÎñÆ÷Ó¦¸ÃÊdzéÏóµÄ£¬Ìæ»»Êý¾Ý¿âÓ¦¸ÃÖ»ÔÚÒ»¸öµØ·½ÉèÖÃ
Äã¿ÉÄÜ»áÏ룬DjangoµÄÊý¾Ý¿â²ãµÄÄ¿±êÓ¦¸ÃÊǽâ¾öÕâЩÎÊÌ⣬ÏÂÃæ¼òµ¥¿´¿´ÔõÑùÓÃDjangoÊý¾Ý¿âAPIÖØÐ´ÉÏÃæ´úÂ룺
- from django.shortcuts import render_to_response
- from mysite.books.models import Book
- def book_list(request):
- books = Book.objects.order_by('name')
- return render_to_response('book_list.html', {'books': books})
ÎÒÃÇÔÚ±¾ÕÂÉÔºó½âÊÍÕâЩ´úÂ룬ÏÖÔÚÏȸоõÒ»ÏÂËüµÄÑù×Ó
MTV¿ª·¢Ä£Ê½
ÔÚÎÒÃÇרÑиü¶àµÄ´úÂë֮ǰ£¬ÈÃÎÒÃÇÏÈ»¨µãʱ¼ä¿¼ÂÇһЩDjango Web³ÌÐòµÄÕûÌåÉè¼Æ
Ç°ÃæµÄÕ½ÚÎÒÃÇÌáµ½£¬DjangoÉè¼ÆÀ´¹ÄÀøËÉñîºÏºÍ·ÖÀë³ÌÐòÄ£¿é
Èç¹ûÄã×ñÑÕâ¸öÕÜѧ£¬¸Ä±äÒ»²¿·Ö´úÂë¶ø²»Ó°ÏìÆäËüÄ£¿éÊǺÜÈÝÒ××öµ½µÄ
ÀýÈçÔÚÊÓͼ·½·¨ÀÎÒÃÇÌÖÂÛÁËʹÓÃÄ£°åÀ´·ÖÀëÒµÎñÂß¼ºÍ³ÊÏÖÂß¼µÄÖØÒªÐÔ
ÔÚÊý¾Ý¿â²ãµÄÊý¾Ý·ÃÎÊÂß¼ÎÒÃǽ«×ñÑͬÑùµÄÕÜѧ
Êý¾Ý·ÃÎÊ£¬ÒµÎñÂß¼ºÍ³ÊÏÖÂß¼×é³É³£ËµµÄ“Model View Controller”(MVC)Èí¼þ¼Ü¹¹Ä£Ê½
“Model”Ö¸Êý¾Ý·ÃÎʲ㣬“View”ָϵͳÖÐÑ¡ÔñʲôÀ´³ÊÏÖÒÔ¼°ÔõÑù³ÊÏֵIJ¿·Ö
“Controller”ÔòָϵͳÖÐͨ¹ýÓû§ÊäÈë¾ö¶¨Ê¹ÓÃÄĸöÊÓͼ¼°·ÃÎʱØÒªµÄÄ£Ð͵IJ¿·Ö
²ÉÓÃMVC,MTVµÈËõдֻÊDZãÓÚ¿ª·¢ÈËÔ±¹µÍ¨
Django×ñÑÁËMVCģʽ£¬Ëü¿ÉÒÔ±»³ÆÎ»MVC¿ò¼Ü£¬ÏÂÃæÊÇM,V,CÔÚDjangoÖеÄλÖãº
1£¬M£¬Êý¾Ý¾Ý·ÃÎʲ¿·Ö£¬Í¨¹ýDjangoµÄÊý¾Ý¿â²ã´¦Àí£¬Ò²¾ÍÊDZ¾ÕÂËù½²ÊöµÄÄÚÈÝ
2£¬V£¬Ñ¡ÔñÊý¾Ý²¢¾ö¶¨ÔõÑù³ÊÏֵIJ¿·Ö£¬Í¨¹ýÊÓͼºÍÄ£°åÀ´´¦Àí
3£¬C£¬¿ØÖƲ¿·Öͨ¹ýDjango¿ò¼Ü±¾ÉíµÄURLÅäÖúͶÔPython·½·¨µÄµ÷ÓÃÀ´´¦Àí
ÒòΪ“C”ÊÇDjango¿ò¼Ü±¾Éí´¦Àí¶øµ¼ÖÂDjango´ó²¿·Ö¾«²ÊµÄ¶«Î÷ÔÚÓÚÄ£ÐÍ£¬Ä£°åºÍÊÓͼ
ËùÒÔDjango±»³ÆÎ»MTV¿ò¼Ü£º
1£¬M£¬´ú±íÄ£ÐÍ£¬ÊÇÊý¾Ý·ÃÎʲ㣬Ëü°üº¬Á˹ØÓÚÊý¾ÝµÄÒ»Çж«Î÷£¬ÔõÑùµÃµ½Êý¾Ý£¬ÔõÑùÑéÖ¤Êý¾Ý£¬
Ëü¾ßÓÐʲôÐÐΪÒÔ¼°Êý¾ÝÖ®¼äµÄ¹ØÏµ
2£¬T£¬´ú±íÄ£°å£¬ÊÇÕ¹Ïֲ㣬Ëü°üº¬Á˳ÊÏÖÏà¹ØµÄ¾ö²ß£¬ÈçÄÚÈÝÔõÑùÔÚWebÒ³ÃæÖÐÏÔʾÒÔ¼°ÆäËüÀàÐ͵ÄÎĵµ
3£¬V£¬´ú±íÊÓͼ£¬ÊÇÒµÎñÂß¼²ã£¬Ëü°üº¬ÁË·ÃÎÊÄ£Ð͵ÄÂß¼ºÍÑ¡ÔñºÏÊʵÄÄ£°å
Äã¿ÉÒÔÈÏΪÊÓͼÊÇÄ£ÐͺÍÄ£°åµÄÇÅÁº
Èç¹ûÄã¶ÔMVC¿ò¼ÜÊìϤ£¬ÈçRuby on Rails£¬Äã¿ÉÒÔ°ÑDjangoµÄÊÓͼÏëÏó³É“controllers”£¬
°ÑDjangoµÄÄ£°åÏëÏó³É“views”£¬ÕâÊǶÔMVCµÄ²»Í¬½âÊÍÔì³ÉµÄ²»ÐҵĻìÂÒ
ÔÚDjango¹ØÓÚMVCµÄ½âÊÍÖУ¬“view”ÃèÊö³ÊÏÖ¸øÓû§µÄÊý¾Ý
ûÓбØÒªÅªÇåÊý¾ÝÔõÑùÏÔʾ£¬¶øÊÇÃèÊöÄĸöÊý¾ÝÓ¦¸Ã±»³ÊÏÖ
¶Ô±È¶øÑÔ£¬Ruby on RailsÒÔ¼°ÀàËÆµÄ¿ò¼Ü½¨ÒécontrollerµÄ¹¤×÷°üÀ¨¾ö¶¨ÄĸöÊý¾ÝÏÔʾ¸øÓû§£¬
ÊÓͼÑϸñµÄ¾ö¶¨Êý¾ÝÔõÑùÏÔʾ£¬¶ø²»ÊǾö¶¨ÄĸöÊý¾ÝÀ´ÏÔʾ
ÿһ¸ö½âÊͶ¼²»±ÈÁíÒ»¸öÕýÈ·£¬×îÖØÒªµÄÊÂÇéÊÇÀí½âµ×²ãµÄ¸ÅÄî
ÅäÖÃÊý¾Ý¿â
ËùÓеÄÕÜѧÀμÇÔÚÐÄÖ®ºó£¬ÈÃÎÒÃÇ¿ªÊ¼·¢¾òDjangoµÄÊý¾Ý¿â²ã
Ê×ÏÈÎÒÃÇ×¢ÒâһЩϸСµÄÅäÖã¬ÎÒÃÇÐèÒª¸æËßDjangoʹÓÃÄĸöÊý¾Ý¿âºÍÔõÑùÁ¬½ÓËü
ÎÒÃǼÙÉèÄãÒѾÓÐÁËÒ»¸öÊý¾Ý¿â·þÎñÆ÷£¬Æô¶¯Ëü²¢´´½¨Ò»¸ödatabase(ʹÓÃCREATE DATABASEÓï¾ä)
SQLiteÊÇÒ»¸öÌØÀý£¬²»ÐèÒª´´½¨database£¬ÒòΪSQLiteÔÚÎļþϵͳÉÏʹÓõ¥¶ÀµÄÎļþ´æ´¢Êý¾Ý
ºÍÉÏÒ»ÕµÄTEMPLATE_DIRSÒ»Ñù£¬Êý¾Ý¿âÅäÖÃÔÚDjangoÅäÖÃÎļþÀïÃæ£¬Ä¬ÈÏÊÇsettings.py
- DATABASE_ENGINE = ''
- DATABASE_NAME = ''
- DATABASE_USER = ''
- DATABASE_PASSWORD = ''
- DATABASE_HOST = ''
- DATABASE_PORT = ''
ÎÒÃÇÀ´¿´¿´Ã¿¸öÅäÖÃÊÇʲôÒâ˼£º
1£¬DATABASE_ENGINE¸æËßDjangoʹÓÃÄĸöÊý¾Ý¿âÒýÇæ£¬Èç¹ûÄãʹÓÃÊý¾Ý¿âºÍDjango¹¤×÷µÄ»°£¬
DATABASE_ENGINE±ØÐëÊÇÏÂÃæµÄ×Ö·û´®¼¯ºÏ£º
ÒýÓÃ
ÉèÖà Êý¾Ý¿â ÐèÒªµÄÊÊÅäÆ÷
postgresql PostgreSQL psycopg version 1.x, http://initd.org/projects/psycopg1
postgresql_psycopg2 PostgreSQL psycopg version 2.x, http://initd.org/projects/psycopg2
mysql MySQL MySQLdb, http://sourceforge.net/projects/mysql-python
sqlite3 SQLite No adapter needed if using Python 2.5+ Otherwise, pysqlite, http://initd.org/tracker/pysqlite
ado_mssql Microsoft SQL Server adodbapi version 2.0.1+, http://adodbapi.sourceforge.net/
oracle Oracle cx_Oracle, http://www.python.net/crew/atuining/cx_Oracle/
×¢Òâ²»¹ÜÄãʹÓÃʲôÊý¾Ý¿â£¬Äã¶¼ÐèÒª°²×°ÏàÓ¦µÄÊý¾Ý¿âÊÊÅäÆ÷£¬Ã¿¸öÊÊÅäÆ÷ÔÚÍøÉ϶¼ÊÇÃâ·ÑµÄ
2£¬DATABASE_NAME¸æËßDjangoÊý¾Ý¿âÃû×ÖÊÇʲô£¬Èç¹ûÄãʹÓÃSQLite£¬
Ö¸³öÊý¾Ý¿âÎļþµÄÍêÕûµÄÎļþϵͳ·¾¶£¬Èç'/home/django/mydata.db'
3£¬DATABASE_USER¸æËßDjangoÄãÁ¬½ÓÊý¾Ý¿âµÄÓû§Ãû£¬Èç¹ûÄãʹÓÃSQLite£¬ÕâÏîΪ¿Õ
4£¬DATABASE_PASSWORD¸æËßDjangoÄãÁ¬½ÓÊý¾Ý¿âµÄÃÜÂ룬Èç¹ûÄãʹÓÃSQLite»òÕßÄãµÄÃÜÂëΪ¿Õ£¬ÔòÕâÏîΪ¿Õ
5£¬DATABASE_HOST¸æËßDjangoÄãÁ¬½ÓÊý¾Ý¿âµÄÖ÷»ú£¬Èç¹ûÄãµÄÊý¾Ý¿âºÍDjango°²×°ÔÚͬһ̨¼ÆËã»úÉÏ£¬ÔòÕâÏîΪ¿Õ
Èç¹ûÄãʹÓÃSQLite£¬ÕâÏîΪ¿Õ
MySQLÔÚÕâÀïºÜÌØÊ⣬Èç¹ûÕâÏîµÄÖµÒÔ'/'¿ªÍ·²¢ÇÒÄãʹÓÃMySQL£¬MySQL»áͨ¹ýUnix socketÁ¬½ÓÌØÊâµÄsocket
ÀýÈçDATABASE_HOST £½ '/var/run/mysql/'
Èç¹ûÄãʹÓÃMySQLµ«ÕâÏîµÄÖµ²»ÊÇÒÔ'/'¿ªÍ·£¬ÄÇôÕâÏîµÄÖµ¾Í¼ÙÉèΪËùÁ¬½ÓµÄÖ÷»ú
6£¬DATABASE_PORT¸æËßDjangoÁ¬½ÓÊý¾Ý¿âµÄ¶Ë¿Ú£¬Èç¹ûÄãʹÓÃSQLite£¬ÔòÕâÏîΪ¿Õ
·ñÔò£¬Èç¹ûÕâÏîΪ¿Õ£¬µ×²ãµÄÊý¾Ý¿âÊÊÅäÆ÷»áʹÓøøµÄÊý¾Ý¿âµÄĬÈ϶˿Ú
´ó²¿·ÖÇé¿öÏÂĬÈ϶˿ڼ´¿É
Ò»µ©ÄãÊäÈëÁËÕâÏîÉèÖ㬲âÊÔÒ»ÏÂÄãµÄÅäÖÃ
Ê×ÏÈÔÚÄãµÚ2Õ´´½¨µÄmysiteÏîĿĿ¼ÏÂÔËÐÐpython manage.py shell
Ä㽫»á¿´µ½½øÈëÁËPython½»»¥»·¾³£¬µ«ÊÇÑÛ¾¦ÊÇ»áÆÈ˵ģ¡
ËüºÍÆÕͨµÄpythonÓÐÒ»¸öÖØÒªµÄ²»Í¬£¬ÆÕͨµÄpythonÃüÁî½øÈëµÄÊÇPython shell£¬
µ«ÊÇǰÕ߸æËßDjangoÔÚÆô¶¯shellǰʹÓÃÄĸösettingsÎļþ
ÕâÊÇ×öÊý¾Ý¿â²éѯµÄÖ÷ҪǰÌᣬDjangoÐèÒªÖªµÀʹÓÃÄĸösettingsÎļþÀ´µÃµ½Êý¾Ý¿âÁ¬½ÓÐÅÏ¢
ÔÚºǫ́£¬python manage.py shellÉèÖÃÁËDJANGO_SETTINGS_MODULE»·¾³±äÁ¿
ºóÃæÎÒÃÇ»á½âÊÍËüµÄ΢ÃîÖ®´¦£¬ÏÈÈÃÎÒÃDzâÊÔÒ»ÏÂÊý¾Ý¿âÅäÖãº
>>> from django.db import connnection
>>> cursor = connection.cursor()
Èç¹ûʲôÊÂÇ鶼ûÓз¢Éú£¬ÔòÄãµÄÊý¾Ý¿âÅäÖöÔÁË
·ñÔò£¬¼ì²é´íÎóÐÅÏ¢×÷ΪÏßË÷£¬¿´¿´ÄÄÀï³ö´íÁË£¬ÏÂÃæÊÇһЩ³£¼ûµÄ´íÎó:
- ´íÎóÐÅÏ¢ ½â¾ö·½·¨
- You haven’t set the DATABASE_ENGINE setting yet.
- ÉèÖÃDATABASE_ENGINE¶ø²»ÊÇΪ¿Õ
- Environment variable DJANGO_SETTINGS_MODULE is undefined.
- ÔËÐÐcommand python manage.py shell¶ø²»ÊÇpython
- Error loading __ module: No module named __.
- Ä㻹ûÓа²×°Êý¾Ý¿âÏà¹ØµÄÊÊÅäÆ÷(Èçpsycopg»òMySQLdb)
- __ isn’t an available database backend.
- ½«ÄãµÄDATABASE_ENGINEÉèÖÃΪºÏ·¨µÄÊý¾Ý¿âÒýÇæ£¬ÄãÊDz»ÊÇÇôí×ÖĸÁË£¿
- database __ does not exist
- ¸ü¸ÄDATABASE_NAMEÖ¸ÏòÒ»¸ö´æÔÚµÄÊý¾Ý¿â£¬»òÕßÖ´ÐÐCREATE DATABASEÓï¾äÀ´´´½¨Ëü
- role __ does not exist
- ¸ü¸ÄDATABASE_USERÖ¸ÏòÒ»¸ö´æÔÚµÄuser£¬»òÕßÔÚÊý¾Ý¿âÖд´½¨Ò»¸öuser
- could not connect to server
- È·ÈÏDATABASE_HOSTºÍDATABASE_PORTÉèÖÃÕýÈ·£¬ÒÔ¼°È·ÈÏÊý¾Ý¿âÕýÔÚÔËÐÐ
ÄãµÄµÚÒ»¸öapp
¼ÈÈ»ÄãÑéÖ¤ÁËÊý¾Ý¿âÁ¬½ÓÕýÈ·£¬ÏÖÔÚ¾ÍÀ´´´½¨Ò»¸öDjango app
Django appÊÇһЩDjango´úÂ룬°üÀ¨Ä£ÐͺÍÊÓͼ£¬ËüÃÇÔÚͬһ¸öPython°üÏÂÃæ£¬´ú±íÁËÒ»¸öÍêÕûµÄDjango³ÌÐò
ÔÚÕâÀïÖµµÃ½âÊÍÒ»ÏÂÊõÓÒòΪÕâÈÝÒ×ʹ³õѧÕßŪºýÍ¿
ÎÒÃǵÚ2ÕÂÒѾ´´½¨ÁËÒ»¸öproject£¬ÄÇôprojectºÍappµÄÇø±ðÊÇÊ²Ã´ÄØ£¿Çø±ð¾ÍÊÇÅäÖúʹúÂ룺
1£¬Ò»¸öprojectÊÇÐí¶àDjango appµÄ¼¯ºÏµÄʵÀý£¬¼ÓÉÏÄÇЩappµÄµÄÅäÖÃ
¼¼ÊõÉÏÀ´Ëµ£¬Ò»¸öprojectΨһµÄǰÌáÊÇËüÌṩһ¸ösettingsÎļþ£¬ÀïÃæ¶¨ÒåÁËÊý¾Ý¿âÁ¬½ÓÐÅÏ¢£¬
°²×°µÄapp£¬TEMPLATE_DIRSµÈµÈ
2£¬Ò»¸öappÊÇDjangoµÄ¿ÉÒÆ¶¯¹¦Äܼ¯£¬Í¨³£°üÀ¨Ä£ÐͺÍÊÓͼ£¬´æÔÚÓÚÒ»¸öµ¥¶ÀµÄPython°üÀïÃæ
ÀýÈ磬Djangoº¬Óм¸¸öapp£¬ÈçcommentingϵͳºÍ×Ô¶¯µÄadmin½çÃæ
¹Ø¼üҪעÒâµÄÊÇËüÃÇÊÇ¿ÉÒÆ¶¯²¢ÇÒ¿ÉÒÔÔÚ²»Í¬µÄprojectÖØÓÃ
ûÓÐÑϸñµÄ¹æ¶¨ÔõÑù°²Åźͼƻ®ÄãµÄDjango´úÂ룬ËüÊǺÜÁé»îµÄ
Èç¹ûÄãÔÚ¹¹½¨Ò»¸öµ¥¶ÀµÄÍøÕ¾£¬Äã¿ÉÄÜֻʹÓÃÒ»¸öapp
Èç¹ûÄãÔÚ¹¹½¨Ò»¸ö¸´ÔÓµÄÕ¾µã£¬Äã¿ÉÄÜÏë°ÑËü·Ö³É¼¸¸öapp£¬ÕâÑùÄã¾Í¿ÉÒÔÔÚÒÔºó·Ö±ðÖØÓÃËûÃÇ
ÔÚÇ°ÃæÎÒÃǵÄÀý×ÓÖÐÖ¤Ã÷ÎÒÃÇȷʵ¸ù±¾²»ÐèÒª´´½¨app£¬ÎÒÃÇÖ»ÊÇ´´½¨ÁËÒ»¸öviws.pyÎļþ
È»ºóÔÚÀïÃæÐ´ÊÓͼ·½·¨²¢ÉèÖÃÎÒÃǵÄURLÅäÖÃÖ¸ÏòÕâЩ·½·¨£¬ÎÒÃDz»ÐèÒª“apps”
µ«ÊÇ£¬ÓÐÒ»µãÐèÒªÖØÊÓapp¹ßÀý£¬Èç¹ûÄãʹÓÃDjangoµÄÊý¾Ý¿â²ã(Ä£ÐÍ)£¬Äã±ØÐë´´½¨Django app
Ä£ÐͱØÐë´æÔÚÓÚapp£¬ËùÒÔΪÁË¿ªÊ¼Ð´Ä£ÐÍ£¬ÎÒÃǽ«´´½¨Ò»¸öеÄapp
ÔÚÇ°Ãæ´´½¨µÄmysiteĿ¼ÏÂÃæ£¬ÔËÐÐÏÂÃæµÄÃüÁîÀ´´´½¨Ò»¸öеÄapp£º
python manage.py startapp books
Õâ¸öÃüÁî²»»áÔì³ÉÈκÎÊä³ö£¬µ«ËüÔÚmysiteĿ¼Ï´´½¨ÁËÒ»¸öbooksĿ¼£¬ÈÃÎÒÃÇ¿´¿´ËüµÄÄÚÈÝ£º
books/
__init__.py
models.py
views.py
ÕâЩÎļþ½«°üº¬Õâ¸öappµÄÄ£ÐͺÍÊÓͼ
ÓÃÄã×îϲ»¶µÄÎı¾±à¼Æ÷¿´¿´models.pyºÍviews.py£¬ËüÃǶ¼Êǿյ쬳ýÁËmodels.pyÀïÒ»¸öimport
ÕâÊÇÄãµÄDjango appµÄ¿Õ°×Çø
ÓÃPython¶¨ÒåÄ£ÐÍ
ÎÒÃÇÇ°ÃæÌÖÂÛµ½£¬MTVÖеÄM´ú±íÄ£ÐÍ
Ò»¸öDjangoÄ£ÐÍÓÃPython´úÂëÃèÊöÁËÄãµÄÊý¾Ý¿âÖеÄÊý¾Ý
ËüÊÇÄãµÄÊý¾Ý½á¹¹£¬Ï൱ÓÚSQLµÄCREATE TABLEÓï¾ä£¬³ýÁËÔÚPythonÖÐËü±ÈÊý¾Ý¿â¶¨Òå°üº¬µÄÄÚÈݸü¶à
DjangoÔÚºǫ́ʹÓÃÄ£ÐÍÀ´Ö´ÐÐSQL´úÂë²¢·µ»Ø·½±ãµÄPythonÊý¾Ý½á¹¹À´±íʾÄãµÄÊý¾Ý¿â±íµÄÐÐ
DjangoҲʹÓÃÄ£ÐÍÀ´ÃèÊöһЩ¸ß¼¶¸ÅÄÕâЩSQLÊÇ×ö²»µ½µÄ
Èç¹ûÄã¶ÔÊý¾Ý¿âºÜÊìϤ£¬Äã¿ÉÄÜÂíÉÏ»áÏëµ½¼ÈÔÚPythonÖÐÓÖÔÚSQLÖж¨ÒåÊý¾ÝÄ£ÐÍÆñ²»ÊǺܶàÓࣿ
Django²ÉÓÃÕâÖÖ¹¤×÷·½Ê½Óм¸¸öÔÒò£º
1£¬×ÔʡҪÇó¹ý¶È²¢ÇÒ²»ÍêÃÀ
ΪÁËÌṩ·½±ãµÄÊý¾Ý·ÃÎÊAPI£¬DjangoÐèÒªÖªµÀÊý¾Ý¿â½á¹¹£¬ÓÐÁ½ÖÖ·½Ê½´ïµ½Õâ¸öÄ¿±ê
Ò»ÊÇÔÚPythonÀïÏÔʽµÄÃèÊöÊý¾Ý£¬Ò»ÊÇÔËÐÐʱÄÚÊ¡Êý¾Ý¿âÀ´¾ö¶¨Êý¾ÝÄ£ÐÍ
µÚ¶þÖÖ·½Ê½¿´ÆðÀ´¸ü¸É¾»£¬ÒòΪ±íµÄÔªÊý¾Ý½ö½ö´æÔÚÓÚÒ»¸öµØ·½£¬µ«Õâ»áµ¼Ö¼¸¸öÎÊÌâ
µÚÒ»£¬ÔËÐÐʱÄÚÊ¡Êý¾Ý¿âÏÔȻҪÇó¹ý¶È
Èç¹ûÿ´ÎWebÇëÇó¶¼ÐèÒªÄÚÊ¡Êý¾Ý¿â£¬¼´Ê¹Web·þÎñÆ÷ÒѾ³õʼ»¯£¬ÕâÒ²»áµ¼ÖµĹý¶ÈµÄµÈ¼¶²»¿É½ÓÊÜ
(ÓÐЩÈËÈÏΪÕâ¸ö¹ý¶ÈµÄµÈ¼¶¿ÉÒÔ½ÓÊÜ£¬µ«DjangoµÄ¿ª·¢ÕßÄ¿±êÊÇ´ò°Ü¾¡¿ÉÄܶàµÄ¹ý¶È¿ò¼Ü£¬
ËùÒÔÕâ¸ö·½°¸Ê¹Django³É¹¦µÄÔÚËÙ¶ÈÉÏ¿ìÓÚÆäËüµÄ¸ß¼¶¿ò¼Ü)µÚ¶þ£¬Ò»Ð©Êý¾Ý¿âÌØ±ðÊǾɰ汾µÄMySQL
²¢²»°Ñ×ã¹»µÄÔªÊý¾Ý´æ´¢ÆðÀ´£¬ËùÒԾ͵¼Ö²»ÄܽøÐÐ׼ȷºÍÍêÕûµÄ×ÔÊ¡
2£¬Ð´Python´úÂëÊÇ¿ìÀֵ쬱£³ÖËùÓеÄÊÂÇéÓÃPythonÀ´×ö¿ÉÒÔ¼õÉÙÄã´óÄÔ×÷Çл»µÄʱ¼ä
Èç¹ûÄã±£³ÖÒ»¸öµ¥¶ÀµÄ¿ª·¢»·¾³ºÍÐÄÖǾ¡¿ÉÄܾã¬Ëü½«ÊÇÄã·Ç³£µÄ¸ßЧ
дSQL£¬È»ºóPython£¬È»ºóÓÖSQLÊǺÜÁîÈËÐÄ·³µÄ
3£¬ÈÃÊý¾ÝÄ£ÐÍ´æ´¢ÔÚ´úÂëÀï¶ø²»ÊÇÄãµÄÊý¾Ý¿â»áʹÄã¸üÈÝÒ׿ØÖÆÄãµÄÄ£ÐͰ汾
ÕâÑùÄã¿ÉÒÔºÜÇáËɵĸú×ÙÄãµÄÊý¾ÝµÄ¸ü¸Ä
4£¬SQL½ö½öÔÊÐí¹ØÓÚÊý¾Ý½á¹¹µÄijһ¼¶±ðµÄÔªÊý¾Ý
ÀýÈ磬´ó²¿·ÖÊý¾Ý¿âϵͳ²¢²»ÌṩרÃŵÄÊý¾ÝÀàÐÍÀ´Ö§³Öe-mailµØÖ·»òÕßurl
DjangoÄ£ÐÍÔò¿ÉÒÔ£¬¸ß¼¶Êý¾ÝÀàÐ͵ÄÓŵãÊǸü¸ßµÄÉú²úÂʺ͸üÒ×ÖØÓõĴúÂë
5£¬SQLÔÚ²»Í¬µÄÊý¾Ý¿âƽ̨²»Ò»Ö£¬ÀýÈ磬Èç¹ûÄãÕýÔÚ·¢²¼ÄãÒ»¸öWeb³ÌÐò
·¢²¼Ò»¸öPythonÄ£¿éÀ´ÃèÊöÊý¾Ý½á¹¹»á±È·Ö¿ªÎªMySQL£¬PostgreSQLºÍSQLiteдCREATE TABLEÓï¾ä¸ü¸ßЧ
¾¡¹ÜÈç´Ë£¬Õâ¸ö·½·¨µÄÒ»¸öȱµãÊÇPython´úÂëËù×öµÄÊÂÇé¿ÉÄܳ¬³öʵ¼ÊÉÏÊý¾Ý¿âÀïµÄÊý¾ÝµÄ·¶Î§
Èç¹ûÄã¸ü¸ÄÁËDjangoÄ£ÐÍ£¬ÄãÐèÒªÔÚÄãµÄÊý¾Ý¿â×öͬÑùµÄ¸Ä¶¯×ö±£³ÖÊý¾Ý¿âºÍÄ£ÐÍÒ»ÖÂ
±¾ÕºóÃæÎÒÃǽ«Ïêϸ½âÊͽâ¾ö´ËÎÊÌâµÄ²ßÂÔ
×îºó£¬ÎÒÃDZØÐëÖ¸³öµÄÊÇDjango°üº¬ÁËÒ»¸ö¸¨Öú¹¤¾ßÀ´Í¨¹ýÏÖ´æµÄÊý¾Ý¿âÉú³ÉÄ£ÐÍ
Õâ¶ÔÓÚѸËٽӹܺÍÔËÐÐÒÅÁôÊý¾ÝºÜÓаïÖú
ÄãµÄµÚÒ»¸öÄ£ÐÍ
ÕâÒ»ÕÂÎÒÃǽ«¹Ø×¢book/author/publisherÊý¾Ý½á¹¹£¬ËüÃÇÊÇÖÚËùÖÜÖªµÄ
ÎÒÃǽ«Ö§³ÖһϸÅÄÓòºÍ¹ØÏµ£º
1£¬Ò»¸öauthorÓÐÒ»¸ösalutation(ÈçMr.»òMrs.)£¬Ò»¸öfirst name£¬Ò»¸ölast name£¬Ò»¸öe-mailµØÖ·ºÍÒ»¸öÍ·Ïñphoto
2£¬Ò»¸öpublisherÓÐÒ»¸öname£¬Ò»¸östreetµØÖ·£¬Ò»¸öcity£¬Ò»¸östate/province£¬Ò»¸öcountryºÍÒ»¸öWeb site
3£¬Ò»¸öbookÓÐÒ»¸ötitleºÍÒ»¸öpublication date£¬Ò»¸ö»ò¶à¸öauthors(many-to-many)£¬Ò»¸öµ¥¶ÀµÄpublisher(one-to-many)
ÔÚDjangoÖеÚÒ»²½ÊÇʹÓÃPython´úÂëÃèÊöÉÏÃæµÄÊý¾Ý¿â½á¹¹£¬ÔÚstartappÃüÁî´´½¨µÄmodels.pyÖÐÊäÈëÏÂÃæµÄÄÚÈÝ£º
- from django.db import models
- class Publisher(models.Model):
- name = models.CharField(maxlength=30)
- address = models.CharField(maxlength=50)
- city = models.CharField(maxlength=60)
- state_province = models.CharField(maxlength=30)
- country = models.CharField(maxlength=50)
- website = models.URLField()
- class Author(models.Model):
- salutation = models.CharField(maxlength=10)
- first_name = models.CharField(maxlength=30)
- last_name = models.CharField(maxlength=40)
- email = models.EmailField()
- headshot = models.ImageField(upload_to='/tmp')
- class Book(models.Model):
- title = models.CharField(maxlength=100)
- authors = models.ManyToManyField(Author)
- publisher = models.ForeignKey(Publisher)
- publication_date = models.DateField()
ÕâÕÂÎÒÃÇ»á̸µ½Ä£ÐÍÓï·¨ºÍÑ¡ÏÈÃÎÒÃÇÏÈÀ´¿ìËٵĿ´¿´ÕâЩ´úÂëÀ´µÃµ½»ù±¾µÄÓ¡Ïó
ҪעÒâµÄµÚÒ»µãÊÇÿ¸öÄ£ÐͶ¼ÊÇdjango.db.models.ModelµÄ×ÓÀà
ËüÃǵĸ¸ÀàModel°üº¬ÁËÈÃÕâЩ¶ÔÏó¾ßÓÐÓëÊý¾Ý¿â½»»¥ÄÜÁ¦µÄ»úÖÆ
ÕâÑùÒ»À´ÎÒÃǵÄÄ£ÐÍÖ»¸ºÔð¶¨Òå×Ô¼ºµÄÓò¾ÍÐÐÁË£¬Óï·¨Ï൱¼ò½à½ô´Õ
²»¹ÜÏàÐÅÓë·ñ£¬Õâ¾ÍÊÇͨ¹ýDjango½øÐÐÊý¾Ý·ÃÎʵÄËùÓдúÂë
Ò»¸öÄ£ÐÍͨ³£ÓòÒ»¸öÊý¾Ý¿â±í¶ÔÓ¦£¬¶øÃ¿¸öÊôÐÔºÍÊý¾Ý¿â±íµÄÒ»ÁжÔÓ¦
ÊôÐÔÃû¶ÔÓ¦ÁÐÃû£¬ÊôÐÔµÄÀàÐÍ(ÈçCharField)¶ÔÓ¦Êý¾Ý¿âÁÐÀàÐÍ
ÀýÈçPublisherÄ£ÐͶÔÓ¦ÁËÏÂÃæµÄ±í(¼ÙÉèʹÓÃPostgreSQLµÄCREATE TABLEÓï·¨)£º
- CREATE TABLE "books_publisher" (
- "id" serial NOT NULL PRIMARY KEY,
- "name" varchar(30) NOT NULL,
- "address" varchar(50) NOT NULL,
- "city" varchar(60) NOT NULL,
- "state_province" varchar(30) NOT NULL,
- "country" varchar(50) NOT NULL,
- "website" varchar(200) NOT NULL
- );
ÊÂʵÉÏDjango×Ô¼º¿ÉÒÔÉú³ÉCREAT TABLEÓï¾ä£¬ÎÒÃÇÒ»»áÔÙ¿´
Ò»¸öÀà¶ÔÓ¦Ò»¸öÊý¾Ý¿â±íµÄÌØÀýÊǶà¶Ô¶à¹ØÏµ£¬ÎÒÃǵÄÀý×ÓÖÐBookÓÐÒ»¸öManyToManyField½Ð×÷authors
Õâ±íÃ÷bookÓµÓÐÒ»¸ö»ò¶à¸öauthors£¬µ«ÊÇBook±í²¢Ã»ÓÐauthorsÁÐ
Django´´½¨ÁËÒ»¸ö¸½¼ÓµÄ¶à¶Ô¶àÁ¬½Ó±íÀ´´¦Àíbooksµ½authorsµÄÓ³Éä
×îºó×¢ÒâµÄÊÇÎÒÃÇûÓÐÔÚÈκÎÒ»¸öÄ£ÐÍÖÐÏÔʾµÄ¶¨ÒåÖ÷¼ü
³ý·ÇÄã×Ô¼º¶¨ÒåÒ»¸öÖ÷¼ü£¬Django»á×Ô¶¯ÎªÃ¿¸öÄ£ÐÍÉú³ÉÒ»¸öintegerÖ÷¼üÓòid
ÿ¸öDjangoÄ£ÐͶ¼±ØÐëÓÐÒ»¸öµ¥ÁеÄÖ÷¼ü
°²×°Ä£ÐÍ
дÍê´úÂ룬ÏÂÃæÈÃÎÒÃÇÀ´´´½¨Êý¾Ý¿â±í
µÚÒ»²½ÊÇÔÚDjangoÖ줻îÕâЩģÐÍ£¬ÐèÒª°ÑbooksÕâ¸öappÌí¼Óµ½settingsÎļþµÄappsÁбí
±à¼settings.py£¬²éÕÒINSTALLED_APPSÉèÖÃ
INSTALLED_APPS¸æËßDjangoÄÄЩappsÊǻµÄ£¬Ä¬ÈÏʱÈçÏÂËùʾ£º
- INSTALLED_APPS = (
- 'django.contrib.auth',
- 'django.contrib.contenttypes',
- 'django.contrib.sessions',
- 'django.contrib.sites',
- )
ÏÈÓÃ(#)°ÑÕâЩstrings×¢Ê͵ô£¬ºóÃæÎÒÃÇÔÙ¼¤»îºÍÌÖÂÛËüÃÇ
È»ºóÌí¼Ó'mysite.books'µ½INSTALLED_APPSÁÐ±í£¬×îºóÈçÏÂËùʾ£º
- INSTALLED_APPS = (
- #'django.contrib.auth',
- #'django.contrib.contenttypes',
- #'django.contrib.sessions',
- #'django.contrib.sites',
- 'mysite.books',
- )
±ðÍüÁË×îºóµÄ¶ººÅ
˳±ã˵һÏ£¬±¾Êé×÷Õßϰ¹ßÓëÔÚÔª×éµÄÔªËØºóÃæ¶¼¼ÓÉ϶ººÅ£¬ÎÞÂÛÔª×éÊÇ·ñÖ»ÓÐÒ»¸öÔªËØ
Õâ¿ÉÒÔ±ÜÃâÍü¼Ç¼Ó¶ººÅ£¬¼ÓÁËÒ²²»»á·£¿î
'mysite.books'Ö¸ÎÒÃÇÕýÔÚ¹¤×÷µÄbooks app
INSTALLED_APPSÖеÄÿ¸öapp¶¼ÓÃÍêÕûµÄPython PATHÀ´±íʾ£¬¼´°üµÄPATH£¬ÓÃСÊýµã·Ö¸ôÀ´Ö¸Ïòapp°ü
Django appÒѾÔÚsettingsÎļþ¼¤»î£¬ÎÒÃÇ¿ÉÒÔÔÚÊý¾Ý¿âÖд´½¨±íÁË
Ê×ÏÈͨ¹ýÈçϵÄÃüÁîÑéÖ¤Ò»ÏÂÄ£ÐÍ£ºpython manage.py validate
validateÃüÁî¼ì²éÎÒÃǵÄÄ£ÐÍÓï·¨ºÍÂß¼ÕýÈ·Óë·ñ
Èç¹ûÒ»ÇÐÕý³££¬ÎÒÃǻῴµ½0 errors foundµÄÐÅÏ¢
·ñÔò£¬È·ÈÏÄãµÄÄ£ÐÍ´úÂëÊäÈëÕýÈ·£¬errorÊä³ö»á¸øÄãÓÐÓõÄÐÅÏ¢À´°ïÄãÕÒµ½´íÎóµÄ´úÂë
ÈκÎʱºòÄãÈÏΪÄãµÄÄ£ÐÍ´úÂëÓÐÎÊÌâ¶¼¿ÉÒÔÔËÐÐpython manage.py validateÀ´²¶×½Ä£ÐÍ´íÎó
Èç¹ûÄãµÄÄ£ÐÍÊǺϷ¨µÄ£¬ÔËÐÐÏÂÃæµÄÃüÁîΪbooks appµÄÄ£ÐÍÉú³ÉCREATE TABLEÓï¾ä
(Èç¹ûÄãʹÓÃUnix»áÓÐÎåÑÕÁùÉ«µÄÓï·¨¸ßÁÁ)£ºpython manage.py sqlall books
Õâ¸öÃüÁîÖУ¬booksÊÇappµÄÃû×Ö£¬ÔËÐÐÍêÃüÁÄã»á¿´µ½ÏÂÃæµÄÐÅÏ¢£º
- BEGIN;
- CREATE TABLE "books_publisher" (
- "id" serial NOT NULL PRIMARY KEY,
- "name" varchar(30) NOT NULL,
- "address" varchar(50) NOT NULL,
- "city" varchar(60) NOT NULL,
- "state_province" varchar(30) NOT NULL,
- "country" varchar(50) NOT NULL,
- "website" varchar(200) NOT NULL
- );
- CREATE TABLE "books_book" (
- "id" serial NOT NULL PRIMARY KEY,
- "title" varchar(100) NOT NULL,
- "publisher_id" integer NOT NULL REFERENCES "books_publisher" ("id"),
- "publication_date" date NOT NULL
- );
- CREATE TABLE "books_author" (
- "id" serial NOT NULL PRIMARY KEY,
- "salutation" varchar(10) NOT NULL,
- "first_name" varchar(30) NOT NULL,
- "last_name" varchar(40) NOT NULL,
- "email" varchar(75) NOT NULL,
- "headshot" varchar(100) NOT NULL
- );
- CREATE TABLE "books_book_authors" (
- "id" serial NOT NULL PRIMARY KEY,
- "book_id" integer NOT NULL REFERENCES "books_book" ("id"),
- "author_id" integer NOT NULL REFERENCES "books_author" ("id"),
- UNIQUE ("book_id", "author_id")
- );
- CREATE INDEX books_book_publisher_id ON "books_book" ("publisher_id");
- COMMIT;
×¢ÒâÒÔϼ¸µã£º
1£¬±íÃ÷×Ô¶¯ÓÉappÃû(books)ºÍСдµÄÄ£ÐÍÃû£publisher£¬bookºÍauthor×é³É
Äã¿ÉÒÔ¸²¸ÇÕâ¸öÐÐΪ£¬ÎÒÃDZ¾ÕºóÃæ»á¿´µ½
2£¬Ç°ÃæÌáµ½£¬Django×Ô¶¯¸øÃ¿¸ö±íÌí¼ÓÖ÷¼üidÓò£¬ÄãÒ²¿ÉÒÔ¸²¸ÇÕâµã
3£¬Ï°¹ßÔ¼ÊøÉÏDjango»áÔÚÍâ¼üÓòµÄÃû×ÖºóÃæÌí¼Ó“_id”£¬ÄãÒѾ²Âµ½ÁË£¬ÄãÒ²¿ÉÒÔ¸²¸ÇÕâµã
4£¬Íâ¼ü¹ØÏµÓÉÏÔʽµÄREFERENCESÓï¾äÀ´Íê³É
5£¬ÕâЩCREATE TABLEÓï¾äÊÇÕë¶ÔÄãʹÓõÄÊý¾Ý¿âÉú³ÉµÄ£¬ËùÒÔÊý¾Ý¿âרÓеÄÓòÀàÐÍÈç
aotu_increment(MySQL)£¬serial(PostgreSQL)£¬»òÕßinteger primary key(SQLite)»á×Ô¶¯ÎªÄã´¦Àí
ÀàËÆµÄÈç±íÃûµÄÒýºÅÊÇʹÓõ¥ÒýºÅ»¹ÊÇË«ÒýºÅÒ²Ò»Ñù£¬Õâ¸öÀý×ÓÊÇʹÓõÄPostgreSQLÓï·¨
sqlallÃüÁîÊÂʵÉϲ¢Ã»ÓнӴ¥Êý¾Ý¿â»ò½¨±í£¬Ëü½ö½ö½«Êä³ö´òÓ¡µ½ÆÁÄ»ÉÏ
ËùÒÔÈç¹ûÄãÎÊËü£¬Äã¿ÉÒÔ¿´µ½DJango½«Ö´ÐÐʲô
Èç¹ûÄãÔ¸Ò⣬Äã¿ÉÒÔ¸´ÖÆÕ³ÌùÕâЩSQLµ½ÄãÊý¾Ý¿â¿Í»§¶Ë»òÕßʹÓÃUnix¹ÜµÀÀ´Ö±½Ó´«µÝËü
¾¡¹ÜÈç´Ë£¬DjangoÌṩһ¸ö¼òµ¥µÄ·½Ê½À´°ÑÕâЩSQLÌá½»Êý¾Ý¿â
ÏñÏÂÃæÕâÑùÔËÐÐsyncdbÃüÁpython manage.py syncdb
Äã»á¿´µ½ÈçÏÂÐÅÏ¢£º
Creating table books_publisher
Creating table books_book
Creating table books_author
Installing index for books.Book model
syncdb¼òµ¥µÄ°ÑÄãµÄÄ£ÐÍͬ²½µ½Êý¾Ý¿â
Ëü¼ì²éÊý¾Ý¿âºÍÄãµÄINSTALLED_APPSÖеÄËùÓÐappµÄËùÒÔÄ£ÐÍ£¬¿´¿´ÊÇ·ñÓÐЩ±íÒѾ´æÔÚ£¬Èç¹û±í²»´æÔھʹ´½¨±í
×¢Òâsyncdb²»»áͬ²½¸Ä¶¯»òɾ³ýÁ˵ÄÄ£ÐÍ£¬Èç¹ûÄã¸Ä¶¯»òɾ³ýÁËÒ»¸öÄ£ÐÍ£¬syncdb²»»á¸üÐÂÊý¾Ý¿â(´ý»á¶ùÌÖÂÛÕâ¸ö)
Èç¹ûÄãÔÙÔËÐÐÒ»´Îpython manage.py syncdb£¬²»»á·¢ÉúÈκÎÊÂÇé
ÒòΪÄãûÓÐÌí¼ÓÄ£Ð͵½books app»òÌí¼Óµ½INSTALLED_APPSÖеÄÈκÎapp
Òò´ËÔËÐÐpython manage.py syncdbÊÇÒ»Ö±°²È«µÄ£¬Ëü²»»á°ÑÊÂÇéŪÔã
Èç¹ûÄã¸ÐÐËȤ£¬½øÈëÄãµÄÊý¾Ý¿â·þÎñÆ÷µÄÃüÁîÐпͻ§¶Ë¿´¿´Django´´½¨µÄÊý¾Ý¿â±í
Äã¿ÉÒÔÊÖ¶¯ÔËÐÐÃüÁîÐпͻ§¶ËÈçPostgreSQLµÄpsql£¬»òÕßÔËÐÐpython manage.py dbshell
»ùÓÚÄãµÄDATABASE_SERVERÉèÖ㬺óÕß½«¼ÆËã³öÔËÐÐÄĸöÃüÁîÐпͻ§¶Ë£¬Ò²¸ü·½±ã
Êý¾Ý·ÃÎÊ»ù´¡
Ò»µ©Äã´´½¨ÁËÒ»¸öÄ£ÐÍ£¬Django×Ô¶¯Ìṩ¸ß¼¶Python API¸øÕâЩģÐ͹¤×÷
ÔËÐÐpython manage.py shellÈ»ºóÊäÈëÏÂÃæµÄ´úÂëÊÔÊÔ£º
- >>> from books.models import Publisher
- >>> p = Publisher(name='Apress', address='2560 Ninth St.',
- ... city='Berkeley', state_province='CA', country='U.S.A.',
- ... website='http://www.apress.com/')
- >>> p.save()
- >>> p = Publisher(name="O'Reilly", address='10 Fawcett St.',
- ... city='Cambridge', state_province='MA', country='U.S.A.',
- ... website='http://www.oreilly.com/')
- >>> p.save()
- >>> publisher_list = Publisher.objects.all()
- >>> publisher_list
- [<Publisher: Publisher object>, <Publisher: Publisher object>]
ËäȻֻÓм¸ÐдúÂ룬ȷ´ïµ½Á˺ܶàÄ¿µÄ£¬¾«²ÊµÄ²¿·ÖÊÇ£º
1£¬´´½¨Ò»¸ö¶ÔÏóÖ»ÐèimportºÏÊʵÄÄ£ÐÍÀಢͨ¹ý¸øÃ¿¸öÓò´«µÝÖµÀ´³õʼ»¯Ëü
2£¬µ÷ÓÃsave()·½·¨À´½«Ò»¸ö¶ÔÏó±£´æµ½Êý¾Ý¿â£¬ºǫ́DjangoÔÚÕâÀïÖ´ÐÐÁËÒ»ÌõINSERT SQLÓï¾ä
3£¬Ê¹ÓÃPublisher.objectsÊôÐÔ´ÓÊý¾Ý¿âµÃµ½¶ÔÏó£¬Ê¹ÓÃPublisher.objects.all()µÃµ½PublisherËùÓеĶÔÏóÁбí
ºǫ́DjangoÔÚÕâÀïÖ´ÐÐÁËÒ»ÌõSELECT SQLÓï¾ä
ʵ¼ÊÉÏÄã¿ÉÒÔͨ¹ýDjangoÊý¾Ý¿âAPI×öºÜ¶àÊÂÇ飬µ«ÊÇÎÒÃÇÏÈÀ´¿´Ò»¸öСÂé·³
Ìí¼ÓÄ£Ð͵ÄstringÏÔʾ
ÉÏÃæµÄÀý×ÓÖУ¬µ±ÎÒÃÇ´òÓ¡publishersÁбíʱÎÒÃǵõ½µÄ¶¼ÊÇһЩÎÞÓõÄÐÅÏ¢£¬ÎÒÃǺÜÄѽ«Publisher¶ÔÏóÇø±ð¿ª£º
[<Publisher: Publisher object>, <Publisher: Publisher object>]
ÎÒÃÇ¿ÉÒÔͨ¹ý¸øPublisher¶ÔÏóÌí¼ÓÒ»¸ö__str__()·½·¨À´ÇáËɽâ¾öÕâ¸öÎÊÌâ
__str__()·½·¨¸æËßPythonÔõÑùÏÔʾ¶ÔÏóµÄstringÏÔʾ£¬Äã¿ÉÒÔ¶¯ÊÖÀ´¿´¿´¸øÈý¸öÄ£ÐÍÌí¼Ó__str__()£º
- class Publisher(models.Model):
- name = models.CharField(maxlength=30)
- address = models.CharField(maxlength=50)
- city = models.CharField(maxlength=60)
- state_province = models.CharField(maxlength=30)
- country = models.CharField(maxlength=50)
- website = models.URLField()
- def __str__(self):
- return self.name
- class Author(models.Model):
- salutation = models.CharField(maxlength=10)
- first_name = models.CharField(maxlength=30)
- last_name = models.CharField(maxlength=40)
- email = models.EmailField()
- headshot = models.ImageField(upload_to='/tmp')
- def __str__(self):
- return '%s %s' % (self.first_name, self.last_name)
- class Book(models.Model):
- title = models.CharField(maxlength=100)
- authors = models.ManyToManyField(Author)
- publisher = models.ForeignKey(Publisher)
- publication_date = models.DateField()
- def __str__(self):
- return self.title
Äã¿ÉÒÔ¿´µ½£¬__str__()·½·¨ÎªÁË·µ»ØÒ»¸östringÏÔʾ¿ÉÒÔ×öÈκÎËüÐèÒª×öµÄÊÂÇé
ÕâÀïPublisherºÍBookµÄ__str__()·½·¨¼òµ¥µÄ·µ»ØÁ˶ÔÏóµÄnameºÍtitle
µ«ÊÇAuthorµÄ__str__()¸ü¸´ÔÓÒ»µã£¬·µ»ØÁËfirst_nameºÍlast_nameµÄ×éºÏ
__str__()ΨһµÄÌõ¼þÊÇ·µ»ØÒ»¸östring£¬Èç¹û²»·µ»ØstringµÄ»°Èç·µ»ØÒ»¸öinteger
Python»á´¥·¢Ò»¸öTypeErrorÒì³££¬²¢´øÓГ__str__ returned non-string”ÐÅÏ¢
ΪÁËÈøĶ¯ÉúЧ£¬Í˳öPythonÈ»ºóʹÓÃpython manage.py shellÃüÁîÖØÐ½øÈë
(ÕâÊÇÈôúÂë¸Ä¶¯ÉúЧµÄ×î¼òµ¥µÄ·½Ê½)
ÏÖÔÚ£¬PublisherÁбí¶ÔÏó¸üÈÝÒ×Àí½â£º
- >>> from books.models import Publisher
- >>> publisher_list = Publisher.objects.all()
- >>> publisher_list
- [<Publisher: Apress>, <Publisher: O'Reilly>]
È·ÈÏÄ㶨ÒåµÄÈκÎÄ£ÐͶ¼ÓÐÒ»¸ö__str__()·½·¨£¬²»½öÊÇʹÔÚÄã×Ô¼ºÊ¹Óý»»¥»·¾³Ê±¸ü·½±ã
Ò²ÒòΪµ±DjangoÔÚ¼¸¸öµØ·½ÐèÒªÏÔʾ¶ÔÏóʱ»áʹÓÃ__str__()µÄÊä³ö
×îºó£¬×¢Òâ__str__()ÊǸøÄ£ÐÍÌí¼ÓÐÐΪµÄºÃϰ¹ß
Ò»¸öDjangoÄ£ÐÍÃèÊöµÄ²»½ö½öÊÇÒ»¸ö¶ÔÏóÊý¾Ý¿â±í½á¹¹£¬ËüÒ²ÃèÊöÁ˶ÔÏóÖªµÀÔõÑùÈ¥×öµÄ¹¦ÄÜ
__str__()¾ÍÊÇÕâÑùµÄ¹¦ÄܵÄÒ»¸öÀý×Ó£¬Ò»¸öÄ£ÐÍÖªµÀÔõÑùÏÔʾËü×Ô¼º
°²»ÕлªµçÄÔѧУרҵְҵ¹æ»®Ê¦ÎªÄãÌṩ¸ü¶à°ïÖú¡¾ÔÚÏß×Éѯ¡¿