目錄
- 安裝使用
- 創建項目
- 啟動服務器
- 創建數據庫
- 創建應用
- 創建模型
- 設計路由
- 設計視圖
- 設計模版
安裝使用
Django 項目主頁:https://www.djangoproject.com
訪問官網 https://www.djangoproject.com/download/ 或者 https://github.com/django/django
'''Windows 按住win+R 輸入 cmd,Mac 打開Terminal
pip install Django==3.1.7
或者
git clone https://github.com/django/django.git
'''
# 輸入python進入解釋器,查看版本
import django
print(django.VERSION)
exit()
創建項目
一個網站可以包含多個Django項目,一個Django項目包含多個應用,又包含一組特定的對象,創建項目的基本步驟如下:
- 新建文件夾用來存放項目,然后使用cd命令切換到該文件夾下。
- 輸入下面命令,在該目錄中新建一個mysite項目。
adjango-admin startproject mysite
zsh: command not found: adjango-admin
# 報錯原因是因為沒配置路徑,在這里就不展示配置路徑,直接用絕對路徑執行,如下
/Users/guanfawang/opt/anaconda3/lib/python3.9/site-packages/django/bin/django-admin.py startproject mysite
manage.py
:Django 管理主程序,也是實用的命令工具,方便管理Django項目,同時方便用戶以各種方式與Django項目進行交互。__init__.py
:一個空文件,告訴Python該目錄是一個Python包。settings.py
:全局配置文件。包括Django模塊應用配置、數據庫配置、模版配置等。urls.py
:路由配置文件,包含URL的配置文件,也是用戶訪問Django應用的方式。wigs.py
:一個與WSGI 兼容的Web服務器入口,以便運行項目,相當于網絡通信模塊。
這些文件僅僅包含一個最簡單的Web應用所需要的代碼。當Web應用變得復雜時,將對這些代碼進行擴充。
啟動服務器
執行下面代碼,啟動Web服務器。
cd mysite
python manage.py runserver
復制網址,瀏覽器打開,可以看到下面情況,說明Web服務器啟動成功。
使用Ctrl+C中斷該服務器。
創建數據庫
Django 內置SQLite數據庫,同時支持更多的數據庫,如MySQL、PostgreSQL等,每個Django應用目錄中都包含一個settings.py文件,可以用來實現對數據庫的配置。
# 源settings.py文件默認sqlite3
DATABASES = {'default': {'ENGINE': 'django.db.backends.sqlite3','NAME': BASE_DIR / 'db.sqlite3',}
}# 可以將它修改成mysql
DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','HOST': '127.0.0.1','PORT': '3306','USER': 'root','PASSWORD': '11111111','NAME': 'webname'}
}# 輸入一下命令創建
python manage.py migrate
'''報錯:原因是Django并不認這個外來文件驅動
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module.
Did you install mysqlclient?
'''
# 可以在__init__.py空文件中,添加以下命令
import pymysql
pymysql.install_as_MySQLdb()# 再一次執行創建,就生成了
python manage.py migrate
或者
python manage.py makemigrations
進一步使用客戶端工具連接mysql,就可以看到相關表和數據了。
創建應用
一個Django項目可以包含多個Django應用,執行下面命令將會生成下圖相關文件。
python manage.py startapp demo
migrations
:該文件夾用于在之后定義引用遷移功能。__init__.py
:一個空文件,在這里是必須的。用來將整個應用作為一個Python模塊加載。admin.py
:管理站點模型,用于編寫Django自帶的后臺相關操作,默認為空。apps.py
:定義應用信息。models.py
:設置數據模型,即定義數據表結構。tests.py
:用于編寫測試代碼的文件。views.py
:包含視圖模型的相關操作,即定義業務邏輯。
創建模型
創建模型其實就是創建表,Django通過Model操作數據庫,自動生成相應數據庫類型的SQL語句,所以不需要關注SQL語句和類型,Django自動完成對數據的操作,只要能夠設計Model即可。
打開models.py文件、settings.py文件,添加以下相應的代碼。
# models.py文件添加下面代碼,可以創建數據表格對應的數據模型
from django.db import models # 引用數據庫創建模塊
class Test(models.Model): # 定義表結構,下面是字段列表username = models.CharField(primary_key=True,max_length=20) password = models.CharField(max_length=20) # 定義了password 字段,models.CharField相當于 varchar# settings.py文件新的app:demo
INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','demo'
]
創建表結構
python manage.py migrate
'''
Migrations for 'demo':demo/migrations/0001_initial.py- Create model Test
'''
讓Django知在數據模型中有一些變更。
python manage.py makemigrations demo
'''
Migrations for 'demo':demo/migrations/0001_initial.py- Create model Test
'''
創建demo數據表結構
python manage.py migrate demo
'''
Operations to perform:Apply all migrations: demo
Running migrations:Applying demo.0001_initial... OK
'''
返回客戶端工具查看,可以發現新生成了demo_test表。
設計路由
路由就是根據不同的URL分發不同的信息。路由處理就是在服務器端接收到HTTP請求之后,能夠對請求的路徑字符串進行匹配處理,并根據URL調用相應的應用程序。
URL在Django中其實是由用戶自己構造的,Django約定URL是在項目同名目錄下的url.py文件的urlpatterns列表構造的。
# demo 應用中 view.py 文件,添加下面代碼
from django.http import HttpResponse # 導入HTTP響應模塊def hi(request): # 定義視圖函數return HttpResponse('Hi,my baby') # 設計響應內容,返回響應信息# 編寫路由,url.py 添加下面代碼,綁定URL與視圖函數
from demo import views # 導入模塊視圖urlpatterns = [path('admin/', admin.site.urls),path('hi/',views.hi) # 添加一個元素,定義路由
]
在瀏覽器中輸入:http://127.0.0.1:8000/hi/ 就能看到響應信息,如下圖。
設計視圖
每一個URL都對應一個views視圖函數名,視圖函數名不能相同,否則會報錯。Django約定視圖函數寫在APP應用里的views.py文件中。
# demo 應用中 view.py 文件,添加下面代碼
from demo import views # 導入視圖模塊
from django.conf.urls import urlurlpatterns = [path('admin/', admin.site.urls),path('hi/',views.hi),url(r"^show_news/(\d+)/(\d+)$",views.show_news)]# 編寫路由,url.py 添加下面代碼,綁定URL與視圖函數
from django.http import HttpResponse # 導入HTTP響應模塊def hi(request):return HttpResponse('Hi,my baby')def show_news(request,a,b):return HttpResponse("<h1>新聞、界面<p>新聞類別:%s</p><p>當前頁面:%s</p>"%(a,b))
在瀏覽器中輸入:http://127.0.0.1:8000/hi/)show_news/2/3 就能看到響應信息,如下圖。
設計模版
當用戶發送請求的時候,視圖返回一個響應,響應可以是一個重定向、一個404錯誤、一個XML文檔、一張圖片或者是一個HTML內容的網頁。前面幾個返回的信息比較有限,重點是HTML內容的網頁,把這樣的頁面按規范寫好,然后都放在項目根目錄下的templates文件夾里,這樣的頁面被稱為“模版”頁面。
Django作為成熟的Web框架,需要一種很便利的方法動態生成HTML網頁,因此有了模版這個概念。模版頁面包含一些基礎的HTML代碼和一些特殊的語法,這些特殊的語法主要用于如何將動態數據插入HTML頁面中。
靜態部分:HTML、CSS、Javascript設計。
動態部分:通過Django動態框架設計。
在demo目錄下,創建一個templates目錄,并在templates下創建test.html文件,設計一個簡單的表單頁面,內容如下:
<!DOCTYPE html>
<html lang='en'>
<head><meta charset='UTF-8'><meta name="viewport" content="width=device-width,initial-scale=1.0"><title>Document</title>
</head>
<body>
<form action="search" method="GET"><input type="text" name="name"><input type="submit" value="搜索">
</form>
</body>
</html>
demo 應用中 view.py 文件,添加下面代碼,定義兩個視圖函數。
from django.http import HttpResponsedef hi(request):return HttpResponse('Hi,my baby')def show_news(request,a,b):return HttpResponse("<h1>新聞、界面<p>新聞類別:%s</p><p>當前頁面:%s</p>"%(a,b))def f1(request):return render(request,"test.html")def f2(request):request.encoding='utf-8'if 'name' in request.GET and request.GET["name"]:t = "你搜索的內容為:"+ request.GET['name']else:t = '提交的表單為空'return HttpResponse(t)
編寫路由,在url.py 添加下面代碼,綁定URL與視圖函數。
from demo import views
from django.conf.urls import urlurlpatterns = [path('admin/', admin.site.urls),path('hi/',views.hi),url(r"^show_news/(\d+)/(\d+)$",views.show_news),url(r"^search_form$",views.f1),url(r"search$",views.f2)
]
啟動服務器:python manage.py runserver
。瀏覽器輸入http://127.0.0.1:8000/search_form,進一步輸入網絡爬蟲,可以得到如下結果。