標籤:
一、安裝軟體
1、安裝 Python 2.7、PyCharm、pip(Python包管理工具)、Django ( pip install Django)
二、部署1、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提供的一個管理工具,可以同步資料庫等等 2、啟動建立完成後,就可以正常啟動了。點擊Run 按鈕,啟動時報錯了:
1 Traceback (most recent call last): 2 File "D:/workspace/MyDjangoProject/manage.py", line 10, in <module> 3 execute_from_command_line(sys.argv) 4 File "D:\Python27\lib\site-packages\django\core\management\__init__.py", line 338, in execute_from_command_line 5 utility.execute() 6 File "D:\Python27\lib\site-packages\django\core\management\__init__.py", line 312, in execute 7 django.setup() 8 File "D:\Python27\lib\site-packages\django\__init__.py", line 18, in setup 9 apps.populate(settings.INSTALLED_APPS)10 File "D:\Python27\lib\site-packages\django\apps\registry.py", line 89, in populate11 "duplicates: %s" % app_config.label)12 django.core.exceptions.ImproperlyConfigured: Application labels aren‘t unique, duplicates: admin
應該是admin配置衝突了,開啟setttings.py檔案,發現admin配置重複了
1 INSTALLED_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檔案,輸入以下內容
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檔案,該檔案作為模板,內容如下:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <title></title> 5 </head> 6 <body> 7 <ul> 8 {% for student in students %} 9 <li>10 id:{{ student.id }},姓名:{{ student.name }},age: {{ student.age }}11 </li>12 {% endfor %}13 </ul>14 </body>15 </html>
修改 views.py檔案,添加方法showStudents()
1 def showStudents(request):2 list = [{id: 1, ‘name‘: ‘Jack‘}, {id: 2, ‘name‘: ‘Rose‘}]3 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, 接著設定資料庫串連:
1 DATABASES = { 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 }
配置完成之後,需要檢測資料庫配置是否正確,使用 manage.py shell命令,進入shell互動介面:
輸入:
1 from django.db import connection2 cursor = connection.cursor()
如果不報錯,說明配置正確。建立model,開啟models.py,定義model如下:
1 class Student(models.Model):2 id = models.BigIntegerField3 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
1 def showRealStudents(request):2 list = Student.objects.all()3 return render_to_response(‘student.html‘, {‘students‘: list})
urls.py添加映射 url(r‘^showRealStudents/$‘, showRealStudents) 重啟服務,開啟串連:http://localhost:8000/showRealStudents頁面輸出正常。至此,使用Django,可以正常操作資料庫,自訂模板,在頁面展示資料了。
Python & PyCharm & Django 搭建web開發環境