南寧網(wǎng)站推廣方案如何做免費(fèi)長(zhǎng)尾詞挖掘工具
Django中可以使用views進(jìn)行管理,類似于WPF的MVVM的ViewModel層,也相當(dāng)于MVC架構(gòu)的模Controller層。
一、基于函數(shù)的視圖FBV(Function-Based View)
通過定義一個(gè)函數(shù),包含HttpRequest對(duì)象作為參數(shù),用來(lái)接受客戶端請(qǐng)求,然后返回HttpResponse對(duì)象做為響應(yīng)放回給客戶端。
1.1 先定義一個(gè)模板文件
在template中定義一個(gè)模板文件persondetail.html
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Person Details</title>
</head>
<body>{{ Person }}{{ Person.name }}{{ Person.phone }}
</body>
</html>
1.2 在views.py中創(chuàng)建一個(gè)函數(shù)person_detail
def person_detail(request: HttpRequest, pk: int):"""Show person detailpk: the primarykey of person."""try:p = Person.objects.get(pk=pk)except Person.DoesNotExist:raise Http404("Person Does Not Exist.")return render(request, "persondetail.html", {"Person": p})
1.3 在urls.py中添加新的url
from django.urls import path, re_path
from serverapp import views as serverapp_viewsurlpatterns = [path('test/2023', serverapp_views.test), # 精確匹配path('converter/<int:num>', serverapp_views.converter), # 格式轉(zhuǎn)換re_path(r'^re/(?P<num>[0-9]{1,4})/$', serverapp_views.rematch), # 正則表達(dá)式,通過添加起止符限制匹配,避免中間多級(jí)路徑后匹配到,造成錯(cuò)誤匹配。path('person', serverapp_views.get_person), # 獲取人員信息path('personform', serverapp_views.get_personform), # 使用表單獲取人員信息path('person_detail/<int:pk>', serverapp_views.person_detail) # 視圖演示,展示人員信息
]
1.4 運(yùn)行軟件,在客戶端訪問
?二、基于類的視圖CBV(Class-Based View)
基于類的視圖與基于函數(shù)的視圖大同小異,只不過是使用類代替函數(shù)。
2.1 再views.py文件中定義類
class PersonDetailView(View):"""人員信息視圖類"""form_class = PersonForm # 定義表單類initial = {"key":"value"} # 定義表單初始值tamplate_name = "personform.html" # templage file namedef get(self, request: HttpRequest, *args, **kwargs):"""Get method"""# 渲染表單return render(request, self.tamplate_name, {"personform": self.form_class(initial= self.initial)})def post(self, request: HttpRequest, *args, **kwargs):"""POST method"""form = self.form_class(request.POST)if form.is_valid():# get dataname = form.cleaned_data['name']phone = form.cleaned_data['phone']return HttpResponse(f"The peson name is {name}, phone is {phone}")return render(request, self.tamplate_name, {"personform": form})
2.2 注冊(cè)新的url
from django.urls import path, re_path
from serverapp import views as serverapp_viewsurlpatterns = [path('test/2023', serverapp_views.test), # 精確匹配path('converter/<int:num>', serverapp_views.converter), # 格式轉(zhuǎn)換re_path(r'^re/(?P<num>[0-9]{1,4})/$', serverapp_views.rematch), # 正則表達(dá)式,通過添加起止符限制匹配,避免中間多級(jí)路徑后匹配到,造成錯(cuò)誤匹配。path('person', serverapp_views.get_person), # 獲取人員信息path('personform', serverapp_views.get_personform), # 使用表單獲取人員信息path('person_detail/<int:pk>', serverapp_views.person_detail) , # 視圖演示,展示人員信息path('personformview', serverapp_views.PersonDetailView.as_view()) # 基于類的視圖
]
2.3 定義html文件
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>User Name</title>
</head>
<body><!--action 是訪問的url--><form action="/serverapp/personformview" method="post">{% csrf_token %} <!--防止跨域攻擊-->{{ personform }} <!--引用表單,views函數(shù)中定義的名稱一致--><button type="submit">提交</button></form>
</body>
</html>