一、Django提交表单的几种方式
1.get,post表单提交方式
get:获取数据,用URL访问
post:提交数据,提交数据给后台
2.files和post提交表单
用来上传文件,chunks可以限制大小。
#get()与getlist()
# v=request.POST.get('gender')
# print(v)
# f=request.POST.getlist('favor')
# print(f)
# v2=request.POST.get('city')
# print(v2)
# f2=request.POST.getlist('travel')
# print(f2)
# #上传文件时,fom表单中要添加enctype="multipart/form-data"
# name=request.POST.get('file')
# print(name)
obj=request.FILES.get('file')
#obj还有的属性 obj.name obj.size
print(obj,type(obj),obj.name)
import os
file_path=os.path.join('upload',obj.name)
f=open(file_path,mode='wb')
for i in obj.chunks():
f.write(i)
f.close()
3.其他方法
'put', 'patch', 'delete', 'head', 'options', 'trace'
二、FBV与CBV
FBV(function) 与 CBV(class)
1.function base view
在url.py中定义的是函数
index-->函数名
view.py
def func(request):
...
2.CBV:
在url.py中定义的是类
index-->类
3.CBV的使用
3.1 在urls.py中的设置
注意事项:这里的as_view()是固定用法
from app01 import views
urlpatterns = [
path('home/',views.Home.as_view())
]
3.2在views中的内容
from django.views import View
class Home(View):
def dispatch(self, request, *args, **kwargs):
# 调用父类中的dispatch,用于寻找类中是否有相应的方法
# 用户请求,匹配URL,寻找urls中的处理方法,调用该父类函数查询是否有相应的方法,调用相应方法
print('before')
result=super(Home, self).dispatch(request, *args, **kwargs)
print('after')
return result
def get(self,request):
print(request.method)
return render(request,'home.html')
def post(self,request):
print(request.method)
return render(request,'home.html')
三、模板语言
1.循环和条件语句
<html>
<body>
<div>{{user}}</div>
<ul> {% for row in user_list %}
<li>{{row.0}}</li> <!-- 列表中 -->
<li>{{row.key1}}</li> <!-- 字典中 -->
<li>
{%if age%}
<a >有年龄</a>
{%if age >= 60%}
<a>老年人</a>
{%elif age == 50%}
<a>50岁的人</a>
{%else %}
<a>其他人</a>
{%endif%}
{%else%}
<a >没有年龄</a>
{%endif%}
</li>
{% endfor %}
</ul>
<div>
</div>
</body>
</html>
2.字典在模板语言中的循环
<ul>
{% for key in user_dict.keys %}
<li>{{ key }}</li>
{% endfor %}
</ul>
<ul>
{% for value in user_dict.values %}
<li>{{ value.name }}</li>
{% endfor %}
</ul>
<ul>
{% for k,v in user_dict.items %}
<li>{{ k }}---{{ v }}</li>
{% endfor %}
</ul>
3.循环的其他信息
forlook.counter #计数,从1开始计数
forloop.counter0 #由小到大计数,从0开始
forloop.first #是否为第一个元素,输出TRue/False
forloop.last #是否为最后一个元素,输出TRue/False
forloop.parentloop #嵌套子循环时,输出父循环次数,由1开始
forloop.revcounter #由大到小计数,从1开始
forloop.revcounter0 #由大到小计数,从0开始