[toc]
# Django實踐
[Django](https://www.djangoproject.com/)是一個高級Python Web框架,鼓勵快速開發和整潔適用的設計,它由經驗豐富的開發人員構建,他們處理了Web開發的許多麻煩,所以你可以專注于自己的APP,而無需重復的造輪子。它是免費開源的。
## 開發環境的搭建 for django@python
操作系統為widows
1. 下載安裝python,設置環境變量(添加python安裝目錄之環境變量PATH)。在命令行輸入``python --version ``,回應相應的版本號``python 3.7.2``,表明python安裝成功;
2. 下載安裝python集成開發環境[PyCharm](https://www.jetbrains.com/pycharm/),使用PyCharm Community Edition,免費的。
新建項目,PyCharm會為每個項目創建一個隔離的Python運行環境(virtualenv,venv),在本項目的venv中安裝模塊(如django)不會影響到其它項目。
## django應用開發流程之準備工作
1. 新建項目MyDjangoProject,并未該項目新建了venv(virtualenv,虛擬環境);
2. 安裝Django模塊(在venv虛擬環境下),打開Terminal,輸入``pip install django``即可安裝;
```
(venv) D:\MyPython\MyDjangoProject>pip install django
Collecting django
...
Successfully installed django-2.1.7 pytz-2018.9
...
```
3. 新建Django項目,mysite
```
(venv) D:\MyPython\MyDjangoProject>django-admin startproject mysite .
```
> 注意新建項目命令的點表示在當前目錄下創建該項目;
項目自動創建文件manage.py,該文件將接管該項目的管理工作,查看其支持的命令``python manage.py --help
``
4. 遷移數據庫``python manage.py migrate``
5. 啟動web服務器,``python manage.py runserver``,在瀏覽器輸入http://127.0.0.1:8000/,即可看到該項目的默認主頁;
6. 新建應用程序myapp,``python manage.py startapp myapp``
7. 添加應用myapp至文件settings.py
```
INSTALLED_APPS = [
省略
# my apps
'myapp'
]
```
8. 修改myapp,如這里定義模型,修改models.py,如下:
```
from django.db import models
# Create your models here.
class Topic(models.Model):
'''用戶學習的主題'''
text = models.CharField(max_length=200)
date_added = models.DateTimeField(auto_now_add=True)
def __str__(self):
'''返回模型的字符串表示'''
return self.text
```
9. 對myapp調用makemigrations,``python manage.py makemigrations myapp``
10. 項目遷移,``python manage.py migrate``
> 每次修改應用myapp后,需要重復第9、10步
11. Django提供了后臺管理網站(http://127.0.0.1:8000/admin/),在這里可以查看新定義的模型,不過初次登錄時需要超級管理員身份。現在注冊超級管理員,``python manage.py createsuperuser``,我注冊的超級管理員為admin/admin;
12. 至此就可以登錄django的后臺管理網站,但是沒有發現自己定義的模型Topic,這是因為自定義的models須自己注冊,注冊后再次登錄后臺管理軟件即可看到myapp下的Topic;
## Django web應用開發
上節的準備工作做好之后,就可以正式進行web應用開發了。下面舉例說明。
1. 定義模型Entry,在文件models:
```
class Entry(models.Model):
'''某個主題的具體知識'''
topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
text = models.TextField()
dateadded = models.DateTimeField(auto_now_add=True)
class Meta:
verbose_name_plural = 'entries'
def __str__(self):
'''返回模型的字符串表示'''
return self.text[:50]
```
2. 遷移模型Entry,按上節第9、10步驟,生成了新的遷移文件0002_entry.py,
```
python manage.py makemigrations myapp
python manage.py migrate
```
3. 向管理網站注冊Entry,在
文件admin.py
```
from django.contrib import admin
# Register your models here.
from myapp.models import Topic, Entry
admin.site.register(Entry)
```
4. 至此,超級用戶可以在后臺添加主題,添加文章并把文章關聯到主題;
## 創建網頁
創建網頁分三步:
* 定義URL
* 編寫視圖
* 編寫模板(網頁)
下面舉例說明網頁的創建過程,該例需要創建主頁、主題頁面和文章頁面。
1. 定義URL,編輯mysite/urls.py,新建并編輯myapp/urls.py,如下:
mysite/urls.py
```
from django.contrib import admin
from django.urls import path
from django.conf.urls import include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include(('myapp.urls', 'myapp'), namespace='myapp')),
]
```
myapp/urls.py
```
from django.conf.urls import url
from . import views
urlpatterns = [
# 主頁
url('^$', views.index, name='index'),
]
```
2. 編寫視圖
myapp/views.py
```
from django.shortcuts import render
# Create your views here.
def index(request):
'''網站的主頁'''
return render(request, 'myapp/index.html')
```
3. 編寫模板(網頁)
新建myapp/templates/myapp/index.html
```
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>這是myapp</title>
</head>
<body>
<p>個人博客DEMO</p>
<p>
用Django構建一個個人博客網站。
</p>
</body>
</html>
```
4. 添加網頁的搜索路徑,否則找不到該網頁
mysite/settings.py
```
TEMPLATES = [
{
'DIRS': [os.path.join(BASE_DIR,'myapp/templates/')],
},
]
# 調試用,這里其輸出為:myapp's base directory: D:\MyPython\MyDjangoProject
print("myapp's base directory: ", BASE_DIR)
```
至此輸入 **127.0.0.1/8000** 就可以看到index這個網頁了!
## 創建網頁應用總結
Django有意將創建網頁的過程分開,分別處理URL、視圖和模板(網頁),這樣在項目很大時可以讓參與者專注自己擅長的方面,例如,數據庫專家可以專注于模型,程序員可以專注于視圖代碼,Web設計人員可以專注于模板。
## 參考
* [Django與AJAX實現網頁動態數據顯示](https://blog.csdn.net/mildddd/article/details/79800721)
# 部署django項目