大體流程:
Urls.py 産生url映射到 Views.py , 然後 View.py 從models.py 處獲得資料,利用獲得的資料填充templates中的html檔案,産生完整的response傳回給用戶端
MTV模式:
Model:模型,Django内置ORM與資料庫API的連接配接,使得操作資料庫類似于操作Python的類
Template:模版,靜态檔案,其中可以嵌套Django的内置語言以填充資料,也可以實作一些便利的操作如循環周遊、條件判斷
View:視圖,通過url的映射,根據不同的Request給出不同的Response
其實就類似于MVC模式
具體細節:
1.每一個app都需要在項目的setting.py中注冊,templates有預設路徑,不過每一個不同的app可以有不同的templates檔案夾,但是要标明具體路徑
2.一旦models.py發生變化,需要在終端處python3 manage.py makemigration -> python3 manage.py migrate
3.models.py中的類需要在admin.py中注冊 -> admin.site.register(classname)
4.render(request, templateFile,dictionary)
5.儲存資料:
classname.objects.create(**formdata.cleaned_data)
模版
重寫ListView中的get_query函數以使用as_view()
def get_query(self):
Users = Classname.objects.values(“username”,”password”).distinct()
Return Users
{% load staticfiles %}導入靜态資源資訊
{% static “css/hw_index.css” %}讀取靜态資源檔案内容
{% for type in type_list %} {% endfor %}
{% if name.type in type.type %} {% endif %}
{{ type.type }}
常用内置标簽
For
If
csrf_token
Url
With
Load
Static
Extends
Block
Classname.objects.filter(username=“star”).update(username=“starmoon”)
Classname.objects.all().delete()
Classname.objects.get(name=“star”).delete()
Classname.objects.filter(name=‘star’).delete()
Filter模糊查詢:比對符(p84)
表單
Class ProductForm(forms.form)
name = forms.CharField(max_length=20,label=“name”)
Def index(request):
product = ProductForm()
return render(request,”data_form.html”,locals())
{{ product.as_table }}
{{ product.as_ul }}
{{ product.as_p }}
内置的表單字段與共同參數p94
Class ProductMdelForm(forms.ModelForm):
prodectID = forms.CharField(max_length=20,label=“ID”)
class Meta:
model = Product
fields = [“name”,”weight”,”size”]
exclude = []
labels = {“name”:”Product Name”,”weight”:”Product weight”}
widgets = {name:forms.widgets.TextInput(attrs={“class”:”c1”})}