大体流程:
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”})}