1.Django请求的生命周期:
路由系统 -> 视图函数(获取模板+数据->渲染) -> 返回给用户字符串
2.路由系统:
URL 如/index/ -> 函数,类.as_view()
正则表达式 如/detail/(\d+) -> 函数(参数),类.as_view()(参数)
正则表达式 如/detail/(?P<uid>\d+) -> 函数(参数:uid),类.as_view()(参数:uid)
路由分发 在建立的app里面写类似的对应,如:
url(r'^cmdb/', include("app01.urls")),
对应关系命名 如/detail/ name='a1' ->视图中:reverse
->模板中:{% url 'a1' %}
3.视图函数:
FBV:函数
def index(request,*args,**kwargs):
CBV:类
class Home(views.View):
def get(self,*args,**kwargs):
获取用户请求的数据:
request.POST.get()
request.GET.get()
request.FILES.get()
...............getlist()
上传文件:
obj = request.FILES.get("文件名") obj.name #文件名 obj.size #上传文件的字节 obj.chunks #分块取数据 要上传文件时候要在form表单加入特殊的设置
返回数据:
1.redirect("URL") 2.render(request,"HTML模板的路径", {用于渲染的字典}) 3.HttpResponse("字符串")
4.模板语言:
示例:
render(request,"HTML模板的路径", {'obj':1234,'k1':[1,2,3,4],'k2':{'name':'root','age':19}})
在模板中:
取单值:
{{ obj }}
取列表中的元素:
{{ k1.0 }}
获取字典中的元素:
{{ k2.name }}
循环取列表:
{% for i in k1 %} {{ i }} {% endfor %}
循环取字典:
循环keys {% for row in k2.keys %} {{ row }} {% endfor %} 循环values {% for row in k2.values %} {{ row }} {% endfor %} 循环key和value {% for k,v in k2.items %} {{ k }}-{{ v }} {% endfor %}
5.ORM:
a.创建类和字段
class UserInfo(models.Model): id = models.IntegerField() username = models.CharField(max_length=32)
(注意在settings.py中注册新建的app)
python manage.py makemigrations
python manage.py migrate
b.操作:上一节有讲过,新补充一些:
models.UserInfo.objects.filter(id__gt=1).delete() #id>1 models.UserInfo.objects.filter(id__lt=1).delete() #id<1 models.UserInfo.objects.filter(id__lte=1).delete() #id<=1,大于等于相似 models.UserInfo.objects.filter(id__gt=1).update(name='root',age=18) dic = { 'name':'root', 'age':18 } models.UserInfo.objects.filter(id__gt=1).update(**dic) models.UserInfo.objects.filter(name=1, age=19) dic1 = { 'name': 'root', 'age__gt':18 } #注意这里看可以给key加上__gt models.UserInfo.objects.filter(**dic1)