Python & PyCharm & Django 搭建web開發(fā)環(huán)境
一河质、安裝軟件
1飘千、安裝 Python 2.7轩勘、PyCharm隘世、pip(Python包管理工具)可柿、Django ( pip install Django)
二、部署
1丙者、PyCharm 新建Django工程
完成后复斥,其目錄如下:
子目錄MyDjangoProject下表示工程的全局配置,分別為setttings.py械媒、urls.py和wsgi.py,其中setttings.py包括了系統(tǒng)的數(shù)據(jù)庫配置目锭、應用配置和其他配置,urls.py則
表示web工程Url映射的配置纷捞。
子目錄student則是在該工程下創(chuàng)建的app痢虹,包含了models.py、tests.py和views.py等文件
templates目錄則為模板文件的目錄
manage.py是Django提供的一個管理工具主儡,可以同步數(shù)據(jù)庫等等
2奖唯、啟動
創(chuàng)建完成后,就可以正常啟動了糜值。點擊Run 按鈕丰捷,啟動時報錯了:
1Traceback (most recent call last):2File"D:/workspace/MyDjangoProject/manage.py", line 10,in3execute_from_command_line(sys.argv)4File"D:\Python27\lib\site-packages\django\core\management\__init__.py", line 338,inexecute_from_command_line5utility.execute()6File"D:\Python27\lib\site-packages\django\core\management\__init__.py", line 312,inexecute7django.setup()8File"D:\Python27\lib\site-packages\django\__init__.py", line 18,insetup9apps.populate(settings.INSTALLED_APPS)10File"D:\Python27\lib\site-packages\django\apps\registry.py", line 89,inpopulate11"duplicates: %s"%app_config.label)12django.core.exceptions.ImproperlyConfigured: Application labels aren't unique, duplicates: admin
應該是admin配置沖突了,打開setttings.py文件臀玄,發(fā)現(xiàn)admin配置重復了
1INSTALLED_APPS =(2'django.contrib.admin',3'django.contrib.auth',4'django.contrib.contenttypes',5'django.contrib.sessions',6'django.contrib.messages',7'django.contrib.staticfiles',8'django.contrib.admin',9'student',10)
注釋掉其中一行后(為什么會有這個問題瓢阴,估計是個bug),重新啟動健无,ok
3荣恐、web工程添加頁面
此時,我們尚沒有寫一行代碼,程序就duang跑起來了! 快添加一個Hello World的頁面吧叠穆。
打開student/views.py文件少漆,輸入以下內(nèi)容
1
2
3
4
5defsayHello(request):
s='Hello World!'
current_time=datetime.datetime.now()
html='
%s
%s
'%(s, current_time)returnHttpResponse(html)
打開url.py文件,需要進行url映射的配置:
url(r'^student/', sayHello)
當用戶輸入http://**/student 時硼被,便會調(diào)用sayHello方法示损,該方法通過HttpResponse()將頁面內(nèi)容作為響應返回。
重啟服務嚷硫,訪問http://localhost:8000/student/
在views.py頁面可以將頁面需要的元素通過字符串的形式检访,調(diào)用HttpResponse()類作為響應返回到瀏覽器。但這樣仔掸,頁面邏輯和頁面混合在一起脆贵,手寫起來很繁瑣,工作量比較大起暮。如果我們需要展示一些動態(tài)的數(shù)據(jù)卖氨,而頁面基本不改變的情況下,該怎么做呢负懦?
比如在用戶訪問http://localhost:8000/student/時筒捺,我們想動態(tài)展示一些學生的數(shù)據(jù)≈嚼鳎可以這樣做:
首先在templates目錄下系吭,新建 student.html文件,該文件作為模板颗品,內(nèi)容如下:
1234567
- 8{% for student in students %}9
- 10id:{{ student.id }},姓名:{{ student.name }},age: {{ student.age }}11 12{% endfor %}13
修改 views.py文件村斟,添加方法showStudents()
1defshowStudents(request):2list = [{id: 1,'name':'Jack'}, {id: 2,'name':'Rose'}]3returnrender_to_response('student.html',{'students': list})
該方法將list作為動態(tài)數(shù)據(jù),通過render_to_response方法綁定到模板頁面student.html上抛猫。
添加url映射,url(r'^showStudents/$', showStudents)
修改settings.py模板配置:'DIRS': [BASE_DIR+r'\templates'],
重啟服務孩灯,訪問http://localhost:8000/showStudents闺金,出現(xiàn):
至此,我們已可以正常將一些“動態(tài)”數(shù)據(jù)綁定到模板上了峰档。但是怎么樣訪問數(shù)據(jù)庫呢败匹?
從數(shù)據(jù)庫獲取需要的數(shù)據(jù),展示在頁面上讥巡?
首先需要安裝數(shù)據(jù)庫驅(qū)動啦掀亩,即mysql_python,
接著配置數(shù)據(jù)庫連接:
1DATABASES ={2'default': {3'ENGINE':'django.db.backends.mysql',4'NAME':'student',5'USER':'root',6'PASSWORD':'1234',7'HOST':'127.0.0.1',8'PORT':'3306',9#'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),10}11}
配置完成之后欢顷,需要檢測數(shù)據(jù)庫配置是否正確槽棍,使用 manage.py shell命令,進入shell交互界面:
輸入:
1fromdjango.dbimportconnection2cursor = connection.cursor()
如果不報錯,說明配置正確炼七。
創(chuàng)建model,打開models.py缆巧,定義model如下:
1classStudent(models.Model):2id =models.BigIntegerField3name = models.CharField(max_length=20, default='a')
然后調(diào)用 manage.py syncdb
正常情況下,該步驟做完之后豌拙,model 會和數(shù)據(jù)庫保持一致性陕悬。但是在測試中,命令執(zhí)行成功后按傅,卻發(fā)現(xiàn)數(shù)據(jù)庫并沒有建立該表捉超。
對于該種情況,做如下操作即可正常:
(1)注釋掉models.py文件代碼唯绍,執(zhí)行 manage.py makemigerations?student
【和manage.py migerate --fake】
(2)打開注釋拼岳,執(zhí)行【?manage.py makemigerations student和 】manage.py migerate命令
通過以上兩步,便可正常操作了
views.py中添加方法:showRealStudents
1defshowRealStudents(request):2list =Student.objects.all()3returnrender_to_response('student.html', {'students': list})
urls.py添加映射?url(r'^showRealStudents/$', showRealStudents)
重啟服務推捐,打開連接:http://localhost:8000/showRealStudents
頁面輸出正常裂问。
至此,使用Django牛柒,可以正常操作數(shù)據(jù)庫堪簿,自定義模板,在頁面展示數(shù)據(jù)了皮壁。