å®è£
软件
å®è£
Python 2.7ãPyCharmãpipï¼Pythonå
管çå·¥å
·ï¼ãDjango ï¼ pip install Djangoï¼
é¨ç½²
PyCharm æ°å»ºDjangoå·¥ç¨
å®æåï¼å
¶ç®å½å¦ä¸ï¼
åç®å½MyDjangoProjectä¸è¡¨ç¤ºå·¥ç¨çå
¨å±é
ç½®ï¼åå«ä¸ºsetttings.pyãurls.pyåwsgi.py,å
¶ä¸setttings.pyå
æ¬äºç³»ç»çæ°æ®åºé
ç½®ãåºç¨é
ç½®åå
¶ä»é
ç½®ï¼urls.pyå
表示webå·¥ç¨Urlæ å°çé
ç½®ã
åç®å½studentåæ¯å¨è¯¥å·¥ç¨ä¸å建çappï¼å
å«äºmodels.pyãtests.pyåviews.pyçæ件
templatesç®å½å为模æ¿æ件çç®å½
manage.pyæ¯Djangoæä¾çä¸ä¸ªç®¡çå·¥å
·ï¼å¯ä»¥åæ¥æ°æ®åºçç
å¯å¨
å建å®æåï¼å°±å¯ä»¥æ£å¸¸å¯å¨äºãç¹å»Run æé®ï¼å¯å¨æ¶æ¥éäºï¼
Traceback (most recent call last):
File "D:/workspace/MyDjangoProject/manage.py", line 10, in <module>
execute_from_command_line(sys.argv)
File "D:\Python27\lib\site-packages\django\core\management\__init__.py", line 338, in execute_from_command_line
utility.execute()
File "D:\Python27\lib\site-packages\django\core\management\__init__.py", line 312, in execute
django.setup()
File "D:\Python27\lib\site-packages\django\__init__.py", line 18, in setup
apps.populate(settings.INSTALLED_APPS)
File "D:\Python27\lib\site-packages\django\apps\registry.py", line 89, in populate
"duplicates: %s" % app_config.label)
django.core.exceptions.ImproperlyConfigured: Application labels aren't unique, duplicates: admin
åºè¯¥æ¯adminé
ç½®å²çªäºï¼æå¼setttings.pyæ件ï¼åç°adminé
ç½®éå¤äº
INSTALLED_APPS = (
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.admin',
'student',
)
注éæå
¶ä¸ä¸è¡åï¼ä¸ºä»ä¹ä¼æè¿ä¸ªé®é¢ï¼ä¼°è®¡æ¯ä¸ªbugï¼ï¼éæ°å¯å¨ï¼ok
webå·¥ç¨æ·»å 页é¢
æ¤æ¶ï¼æ们å°æ²¡æåä¸è¡ä»£ç ï¼ç¨åºå°±duangè·èµ·æ¥äº! å¿«æ·»å ä¸ä¸ªHello Worldç页é¢å§ã
æå¼student/views.pyæ件ï¼è¾å
¥ä»¥ä¸å
容
def sayHello(request):
s = 'Hello World!'
current_time = datetime.datetime.now()
html = '<html><head></head><body><h1> %s </h1><p> %s </p></body></html>' % (s, current_time)
return HttpResponse(html)
æå¼url.pyæ件ï¼éè¦è¿è¡urlæ å°çé
ç½®ï¼
url(r'^student/', sayHello)
å½ç¨æ·è¾å
¥http://**/student æ¶ï¼ä¾¿ä¼è°ç¨sayHelloæ¹æ³ï¼è¯¥æ¹æ³éè¿HttpResponse()å°é¡µé¢å
容ä½ä¸ºååºè¿åã
éå¯æå¡ï¼è®¿é®
http://localhost:8000/student/å¨views.py页é¢å¯ä»¥å°é¡µé¢éè¦çå
ç´ éè¿å符串çå½¢å¼ï¼è°ç¨HttpResponse()ç±»ä½ä¸ºååºè¿åå°æµè§å¨ãä½è¿æ ·ï¼é¡µé¢é»è¾å页é¢æ··åå¨ä¸èµ·ï¼æåèµ·æ¥å¾ç¹çï¼å·¥ä½éæ¯è¾å¤§ãå¦ææ们éè¦å±ç¤ºä¸äºå¨æçæ°æ®ï¼è页é¢åºæ¬ä¸æ¹åçæ
åµä¸ï¼è¯¥æä¹åå¢ï¼
æ¯å¦å¨ç¨æ·è®¿é®
http://localhost:8000/student/ æ¶ï¼æ们æ³å¨æå±ç¤ºä¸äºå¦ççæ°æ®ãå¯ä»¥è¿æ ·åï¼
é¦å
å¨templatesç®å½ä¸ï¼æ°å»º student.htmlæ件ï¼è¯¥æ件ä½ä¸ºæ¨¡æ¿ï¼å
容å¦ä¸ï¼
<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body>
<ul>
{% for student in students %}
<li>
id:{{ student.id }},å§åï¼{{ student.name }},age: {{ student.age }}
</li>
{% endfor %}
</ul>
</body>
</html>
ä¿®æ¹ views.pyæ件ï¼æ·»å æ¹æ³showStudents()
def showStudents(request):
list = [{id: 1, 'name': 'Jack'}, {id: 2, 'name': 'Rose'}]
return render_to_response('student.html',{'students': list})
该æ¹æ³å°listä½ä¸ºå¨ææ°æ®ï¼éè¿render_to_responseæ¹æ³ç»å®å°æ¨¡æ¿é¡µé¢student.htmlä¸ã
æ·»å urlæ å°ï¼url(r'^showStudents/$', showStudents)
ä¿®æ¹settings.py模æ¿é
ç½®ï¼'DIRS': [BASE_DIR+r'\templates'],
éå¯æå¡ï¼è®¿é®
http://localhost:8000/showStudentsï¼åºç°ï¼
è³æ¤ï¼æ们已å¯ä»¥æ£å¸¸å°ä¸äºâå¨æâæ°æ®ç»å®å°æ¨¡æ¿ä¸äºãä½æ¯æä¹æ ·è®¿é®æ°æ®åºå¢ï¼
ä»æ°æ®åºè·åéè¦çæ°æ®ï¼å±ç¤ºå¨é¡µé¢ä¸ï¼
é¦å
éè¦å®è£
æ°æ®åºé©±å¨å¦ï¼å³mysql_pythonï¼
æ¥çé
ç½®æ°æ®åºè¿æ¥ï¼
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'student',
'USER': 'root',
'PASSWORD': '1234',
'HOST': '127.0.0.1',
'PORT': '3306',
#'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
é
ç½®å®æä¹åï¼éè¦æ£æµæ°æ®åºé
ç½®æ¯å¦æ£ç¡®ï¼ä½¿ç¨ manage.py shellå½ä»¤ï¼è¿å
¥shell交äºçé¢ï¼
è¾å
¥ï¼
from django.db import connection
cursor = connection.cursor()
å¦æä¸æ¥éï¼è¯´æé
ç½®æ£ç¡®ã
å建model,æå¼models.pyï¼å®ä¹modelå¦ä¸ï¼
class Student(models.Model)
id = models.BigIntegerField
name = models.CharField(max_length=20, default='a')
ç¶åè°ç¨ manage.py syncdb
æ£å¸¸æ
åµä¸ï¼è¯¥æ¥éª¤åå®ä¹åï¼model ä¼åæ°æ®åºä¿æä¸è´æ§ãä½æ¯å¨æµè¯ä¸ï¼å½ä»¤æ§è¡æååï¼å´åç°æ°æ®åºå¹¶æ²¡æ建ç«è¯¥è¡¨ã
对äºè¯¥ç§æ
åµï¼åå¦ä¸æä½å³å¯æ£å¸¸ï¼
ï¼1ï¼æ³¨éæmodels.pyæ件代ç ï¼æ§è¡ manage.py makemigerations student
ãåmanage.py migerate --fakeã
ï¼2ï¼æå¼æ³¨éï¼æ§è¡ã manage.py makemigerations studentå ãmanage.py migerateå½ä»¤
éè¿ä»¥ä¸ä¸¤æ¥ï¼ä¾¿å¯æ£å¸¸æä½äº
views.pyä¸æ·»å æ¹æ³ï¼showRealStudents
def showRealStudents(request):
list = Student.objects.all()
return render_to_response('student.html', {'students': list})
urls.pyæ·»å æ å° url(r'^showRealStudents/$', showRealStudents)
éå¯æå¡ï¼æå¼è¿æ¥ï¼
http://localhost:8000/showRealStudents页é¢è¾åºæ£å¸¸ã
è³æ¤ï¼ä½¿ç¨Djangoï¼å¯ä»¥æ£å¸¸æä½æ°æ®åºï¼èªå®ä¹æ¨¡æ¿ï¼å¨é¡µé¢å±ç¤ºæ°æ®äºã
æå¡å¨
ç±äºDjangoèªå¸¦è½»é级çserverï¼å æ¤é»è®¤ä½¿ç¨è¯¥serverï¼ä½å®é
ç产ä¸æ¯ä¸å
许è¿ä¹å¹²çï¼ç产ç¯å¢ä¸é常使ç¨Apache Httpd Serverç»åmod_wsgi.soæ¥åå端æå¡å¨ã
以ä¸é¨ç½²ç¯å¢ä¸ºï¼Python2.7.6
1ãå®è£
httpd-2.2.25-win32-x86-no_ssl.msi
2ãå°ä¸è½½å¥½çmod_wsgi.so æ¾å¨ D:\Program Files\Apache Software Foundation\Apache2.2\modules 模åä¸ã
3ãå¨æ°å»ºçwebå·¥ç¨ MyDjangoProjectç®å½ä¸æ°å»º django.wsgiæ件
å
容å¦ä¸ï¼ç¸åºçç®å½éè¦ä¿®æ¹ï¼ï¼
import os
import sys
djangopath = "D:/Python27/Lib/site-packages/django/bin"
if djangopath not in sys.path:
sys.path.append(djangopath)
projectpath = 'D:/workspace/MyDjangoProject'
if projectpath not in sys.path:
sys.path.append(projectpath)
apppath = 'D:/workspace/MyDjangoProject/MyDjangoProject'
if apppath not in sys.path:
sys.path.append(apppath)
os.environ['DJANGO_SETTINGS_MODULE']='MyDjangoProject.settings'
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
4ãä¿®æ¹httpd.conf ,æ·»å å¦ä¸ï¼
LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias / "D:/workspace/MyDjangoProject/django.wsgi"
<Directory "D:/workspace/MyDjangoProject/">
Options FollowSymLinks
AllowOverride None
Order deny,allow
Allow from all
</Directory>
ok,éå¯serverï¼é¡µé¢æ£å¸¸äºã
å¨é¨ç½²çè¿ç¨ä¸ï¼éå°ä¸ä¸ªå¼å¸¸ï¼å¦ä¸ï¼
The translation infrastructure cannot be initialized before the apps registry is ready
åå æ¯django.wsgiä¸å¼å§æç
§è¾ä¸ºå¤èçåæ³ï¼æ¹ä¸ºæ°çæ¬çåæ³å°±Okäºã