web後端--Django學習筆記01
一、Django簡介
Django是一個出色的web框架,它是一個“大而全”的框架。
1、MVC設計模式(開發模式)
Model層:操作資料庫的層,存取資料。
View層:檢視層,用來向用戶顯示的。
Controller層:控制層,接收使用者請求,處理業務邏輯,可以呼叫模型層存取資料,獲取從模型層中查詢的資料,選擇相關的View層進行顯示。
2、MTV設計模式(開發模式)
Model層:模型層,操作資料庫的層,存取資料。
Template層:模板層,負責向客戶端顯示的。
View層:檢視層,接收使用者請求,處理業務邏輯,可以呼叫模型層存取資料,獲取從模型層中查詢的資料,選擇相關模板進行顯示,還可以重定向、返回響應文字。
注意:在Django中的View是以檢視函式來實現的。 MVC與MTV在本質上是一樣的,都是為了分工明確、“低耦合”。
二:路由配置
在settings.py中ROOT_URLCONF變數規定了Django專案的主路由檔案(urls.py), 通過主路由檔案中的配置可以找到子路由配置檔案(應用路由urls.py)。 在主路由配置檔案中通過include()函式載入子路由配置檔案。
#主路由配置(Django/urls.py) from django.contrib import admin from django.urls import path,include #載入子路由 urlpatterns = [ path('admin/', admin.site.urls), #子路由應用中url path('myapp/',include('myapp.urls')), path('myapp2/',include('myapp2.urls')) ]
#子路由配置(Django/myapp/url.py) from django.urls import path from myapp2.views import * urlpatterns = [ path('gologin/', go_login), path('login/',login),
三:URL動態傳參
1、動態捕獲引數
通過在路由檔案中的path()函式中的第一個url引數捕獲客戶端傳遞的引數,通過 在匹配URL中新增"<引數名>"動態捕獲引數。 eg: path('book/<author>/<book_name>/',show_book)
2、動態傳遞引數
檢視函式中的形式引數名與URL動態捕獲的引數名一致。def show_book(request,author,book_name): pass
3、對捕獲的引數進行型別轉換
四:re_path()正則匹配路徑
re_path()函式的第一個引數是通過用正則表示式匹配路徑的方式來尋找檢視函式。
re_path()函式也可以進行引數的動態捕獲:使用小括號進行捕獲引數:re_path(r'time/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/',show_date)
五:檢視函式載入模板
1.檢視函式通過返回render(request,'模板路徑')函式載入模板 2.檢視函式也可以通過render()函式向模板傳遞字典,模板接收到資料後可以通過
{{ 模板變數名 }}顯示資料,模板變數名必須與字典中的key一致。
eg: render(request,'login.html',{'msg':"使用者名稱或密碼錯誤,請重新登入!"})
六、補充:
1.啟動開發伺服器:
python manage.py runserver # 啟動本地的埠號為8000的伺服器
python manage.py runserver 8888 # 啟動本地的埠號為8888的伺服器
python manage.py runserver 0.0.0.0:8888 # 任何主機都可以訪問埠號為8888的伺服器 注意:如果想要任何主機都能訪問,則settings.py中要配置 ALLOWED_HOSTS = ['*',]
2、建立應用
在Terminal中輸入:python manage.py startapp 應用名稱
建立應用後在Django/settings.py中的INSTALLED_APPS = [ 新增應用]
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'myapp.apps.MyappConfig', 'myapp2', #新增myapp2應用 ]
七、附錄
1、Django/urls.py #主路由
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('myapp/',include('myapp.urls')),
path('myapp2/',include('myapp2.urls'))
]
2、Django/myapp/urls.py #子路由
from django.urls import path, re_path
from myapp.views import *
urlpatterns = [
path('hello/',hello),
path('book/<author>/<book_name>/',show_book),#捕獲引數
path('add/<int:a>/<int:b>/',add), #int:對捕獲的引數轉換
re_path(r'welcome/',welcome),
re_path(r'time/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/',show_date)
]
3、Django/myapp2/urls.py #子路由
from django.urls import path
from myapp2.views import *
urlpatterns = [
path('gologin/', go_login),
path('login/',login),
]
4、Django/myapp/view.py #檢視函式
from django.http import HttpResponse
from django.shortcuts import render
# Create your views here.
def hello(request):
return HttpResponse("<h3 style='color:red'>hello,歡迎學習</h3>")
def show_book(request,author,book_name):
info = "<h3><span style='color:blue'>" + author +"</span>寫了一本名為<span style='color:red'>" +book_name +"</span>的書</h3>"
return HttpResponse(info)
def add(resquest,a,b):
result = a + b
return HttpResponse("相加結果是:"+str(result))
def welcome(request):
return HttpResponse("<h3>北京歡迎你</h3>")
def show_date(request,year,month,day):
return HttpResponse("<h3>接收的年份是:"+year+";月份是:"+month+",日期是:"+day+"</h3>")
5、Django/myapp2/view.py #檢視函式
from django.shortcuts import render
def go_login(request):
return render(request,'login.html')#載入模板
def login(request):
loginname = request.POST["loginname"]#接收引數
loginpwd = request.POST["loginpwd"]
if loginname == "tom" and loginpwd == "123456":
return render(request,'success.html',{'username':loginname}) #載入模板
else:
return render(request,'login.html',{'msg':"使用者名稱錯誤,請從新登入"})
6、Django/myapp2/templates/longin.html #檢視模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陸頁面</title>
</head>
<body>
<h3 style="color: red">{{msg}}</h3>
<form action="/mypp2/login/" method="post">
登入名:<input type="text" name="loginname"/><br/>
登陸密碼:<input type="password" name="loginpwd"/><br/>
<input type="submit" value="登入"/>
</form>
</body>
</html>
7、Django/myapp2/templates/success.html #檢視模板
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>成功登入</title>
</head>
<body>
恭喜{{username}},登陸成功!
</body>
</html>