Django下載安裝
#下載
pip3 install django==1.11.9
pip3 install django==1.11.9 -i http://xxxxxx 指定源
#創建項目
django-admin startproject mysite 創建了一個名為"mysite"的Django 項目
#啟動項目
python manage.py runserver 默認是127.0.0.1:8000
python manage.py runserver 127.0.0.1 默認端口號是8000
python manage.py runserver 0.0.0.0:80 修改IP和端口
#創建應用
python manage.py startapp blog #通過執行manage.py文件來創建應用,執行這句話一定要注意,你應該在這個manage.py的文件所在目錄下執行這句話,因為其他目錄里面沒有這個文件
Django項目目錄結構
#manage.py -----
Django項目里面的工具,通過它可以調用django shell和數據庫,啟動關閉項目與項目交互等,不管你將框架分了幾個文件,必然有一個啟動文件,其實他們本身就是一個文件。
#settings.py ----
包含了項目的默認設置,包括數據庫信息,調試標志以及其他一些工作的變量。
#urls.py -----
負責把URL模式映射到應用程序。
#wsgi.py ----
runserver命令就使用wsgiref模塊做簡單的web server,后面會看到renserver命令,所有與socket相關的內容都在這個文件里面了,目前不需要關注它。
'''創建的的應用的目錄結構'''
#models.py
之前我們寫的那個名為model的文件就是創建表用的,這個文件就是存放與該app(應用)相關的表結構的
#views.py
存放與該app相關的視圖函數的
admin后台管理系統
#admin是django提供的管理數據的一個平台,可以查看項目的所有數據,包括查看數據,編輯數據,等
1:# 在manage.py Task中創建超級用戶 :createsuperuser,輸入創建賬號,密碼,創建用戶
2:# 在應用的admin文件中添加表,在admin中就可以查看到表了,可以表進行操作
admin.site.register(models.Author)
admin.site.register(models.AuthorDetail)
admin.site.register(models.Publish)
admin.site.register(models.Book)
Djiango路由分發
# 無名分組參數
url(r'^articles/(\d+)/(\d+)/', views.articles), #articles/2019/9/
def articles(request,year,month): # 位置參數 2019 9
print(year,type(year)) #2019 <class 'str'> #匹配出來的所有數據都是字符串
print(month)
return HttpResponse(year+'年'+ month +'月' +'所有文章')
# 有名分組參數
url(r'^articles/(?P<xx>\d+)/(?P<oo>\d+)/', views.articles), #articles/2019/9/
#xx=2019 oo=9 關鍵字傳參
def articles(request,oo,xx): # 關鍵字傳參 2019 9
print(xx,type(xx)) #2019 <class 'str'> #匹配出來的所有數據都是字符串
print(oo)
return HttpResponse(xx+'年'+ oo +'月' +'所有文章')
POST請求數據傳輸
#方式一:
def login(request):
#獲取請求的方式是GET還是POST
path=request.method
#當請求方式是GET的時候返回login頁面
if path=='GET':
return render(request,'login.html')
else:
#為POST的時候,判斷用戶名和密碼,返回首頁或者返回登陸頁面
name=request.POST.get('username')
password=request.POST.get('password')
if name=='lijie'and password=='123456':
return render(request,'home.html')
else:
return render(request,'login.html')
#方式二:
def login(request):
#獲取請求的方式是GET還是POST
path=request.method
#當請求方式是GET的時候返回login頁面
if path=='GET':
return render(request,'login.html')
else:
#為POST的時候,判斷用戶名和密碼,返回首頁或者返回登陸頁面
#request.POST.dict()可以將獲取的數據變成一個字典的形式,通過鍵值的形式取值
data=request.POST.dict()
if data['name']=='lijie'and data['password']=='123456':
return render(request,'home.html')
else:
return render(request,'login.html')
HTTPrequest對象
from django.shortcuts import render
def login(request):
#request參數就是HTTPrequest對象
print(request)#<WSGIRequest: GET '/login/'>
#返回請求的路徑,純路徑
print(request.path)#/login/
#返回請求的路徑,純路徑
print(request.path_info)#/login/
#返回的是請求的全路徑包括參數,不包含ip地址和端口,沒有參數就返回純路徑
print(request.get_full_path())#/login/?a=1&b=1
#查看當前的請求類型
print(request.method)#GET 一般常見的是GET和POST
#返回的是一個QueryDict對象,是HTTP通過GET請求從客戶端發送的請求數據
#可以使用get方法獲取對象的值:name=request.GET.get('username')
print(request.GET)#<QueryDict: {}>
# 返回的是一個QueryDict對象,是HTTP通過POST請求從客戶端發送的請求數據
# 可以使用get方法獲取對象的值:name=request.POST.get('username')
print(request.POST)#<QueryDict: {}>
注意:鍵值對的值是多個的時候,比如checkbox類型的input標簽,select標簽,需要用
request.POST.getlist("hobby")
#返回HTTP請求中的請求體,是byte類型,POST請求的數據就是在body中提取的,GET請求獲取不到數據
print(request.body)
#返回的是一個python字典,包含所有的HTTP請求頭信息
print(request.META)
return render(request,'login.html')
#META的常見值(了解):
CONTENT_LENGTH —— 請求的正文的長度(是一個字符串)。
CONTENT_TYPE —— 請求的正文的MIME 類型。
HTTP_ACCEPT —— 響應可接收的Content-Type。
HTTP_ACCEPT_ENCODING —— 響應可接收的編碼。
HTTP_ACCEPT_LANGUAGE —— 響應可接收的語言。
HTTP_HOST —— 客服端發送的HTTP Host 頭部。
HTTP_REFERER —— Referring 頁面。
HTTP_USER_AGENT —— 客戶端的user-agent 字符串。
QUERY_STRING —— 單個字符串形式的查詢字符串(未解析過的形式)。
REMOTE_ADDR —— 客戶端的IP 地址。
REMOTE_HOST —— 客戶端的主機名。
REMOTE_USER —— 服務器認證后的用戶。
REQUEST_METHOD —— 一個字符串,例如"GET" 或"POST"。
SERVER_NAME —— 服務器的主機名。
SERVER_PORT —— 服務器的端口(是一個字符串)。
#示例:
請求中的任何 HTTP 首部轉換為 META 的鍵時,都會將所有字母大寫並將連接符替換為下划線最后加上 HTTP_ 前綴。
所以,一個叫做 X-Bender 的頭部將轉換成 META 中的 HTTP_X_BENDER 鍵。
HTTPResponse對象
def home(request):
#向前端返回一個字符串
return HttpResponse('返回一個字符串')
#向前段返回一個HTML頁面
return render(request,'home.html')
#臨時重定向,將請求指向另一個頁面,括號里面寫路徑
return redirect('/login/')