Django视图层、模板渲染、1.和2.版本区别

Django视图层、模板渲染、1.和2.版本区别

Django视图层、模板渲染、1.和2.版本区别 1

1. 9/5-视图层 2

1.1. MVC(models view controller)和MTV(models template views) 2

1.2. request对象 2

1.3. 三件套 2

1.3.1. HttpResponse 2

1.3.2. render 3

1.3.3. redirect 3

1.4. JsonResponse 3

1.5. CBV(class base view)和FBV(function base views) 3

1.6. 简单文件上传 4

2. 9/5-1.版本和2.版本区别 4

2.1. path 4

2.1.1. 普通转换器 4

2.1.2. 自定义转换器 5

2.2. re_path 5

3. 9/6-模板渲染 5

3.1. filter{{ }} 5

3.2. tag{% %} 6

3.3. xss(cross-site scripting attack)跨站脚本攻击 6

3.4. 自定义过滤器 6

3.5. 自定义标签 7

 

 

  1. 9/5-视图层
    1. MVC(models view controller)和MTV(models template views)

MTV和MVC本质上都是一样的,

MTC也就是我们所写的,M是模块,T是模板层,views是视图层

只不过MVC中把路由和views拼接成了一个控制器,并且v变成了模板层.

    1. request对象

1.如果在模板的form表单中不写method,默认是get请求.

一般请求数据或者请求页面的时候用get请求

一般向服务器提交数据的时候用post请求

2.request.GET返回的是一个字典

3.request.POST返回的是一个字典

4.通过request.method返回请求的类型

5.http://127.0.0.1:8000/index/ppp/dddd/?name=lqz

协议:ip地址和端口(在命令终端用ping指令转换)/路径?参数(数据)

6.request.path()只获取路径,而request.get_full_path()获取路径+参数

    1. 三件套
      1. HttpResponse

用于返回响应的内容,通常在该函数内加上响应头,一般是通过该函数把响应请求返回给用户

      1. render

用于渲染模板层,通过把数据层的东西提交给模板层,然后进行模板渲染,最后还是通过HttpResponse函数返回响应请求.

      1. redirect

重定向.通过该函数可以指定要跳转的网页,可以通过该网页跳转到另一个网页,重定向一般是因为网页数据发生更改,或者网页不存在,需要跳转到新的页面,请求状态码一般为301和302,和render函数一样,最后还是需要通过HttpREsponse函数返回响应消息.

    1. JsonResponse

JsonResponse(向前端页面发送json格式的字符串)

dic={'name':'laq','age':18}

li=[1,2,3,4]

return HttpResponse(json.dumps(li))#介绍JsonResponse方法的原理,实际情况不用该方法

from django.http import JsonResponse

return JsonResponse(li,safe=False)#除字典以外的数据类型都需要把safe属性改成False才可以进行传输

    1. CBV(class base view)和FBV(function base views)

FBV就是我们通常写的函数式的Django.

CBV是用来类来写Django.

CBV:

from django.views import View

class Test(View):

def dispatch(self,request,*args,**kwargs):#重构View中的dispatch方法,一般情况可以不用更改,View通过该方法判断请求是get还是post

#加点东西

obj=super().dispatch(request,*args,**kwargs)

return obj

def get(self.request):

obj=render(request,'index.html')

return obj

def post(self.request):

return HttpResponse('ok')

CSV中路由配置:re_path(r'index/',views.Test.as_view())

    1. 简单文件上传

模板层代码:

<form action=""method="post"enctype="multipart/form-data">#enctype是选定文件编码的格式

username:<input type="text"name="name">

password:<input type="text"name="password">

file:<input type="file"name="myfile">

<input type="submit">

</form>

视图层代码:

file_obj=request.FILES.get('myfile')

file_name=file_obj.name

from django.core.filesuploadedfile import InMemoryUploadedFile

with open(file_name,'wb')as f:

for line in file_obj.chunks():#chunks()方法可以把下载的文件一点点读取存入,因为for只能循环可迭代对象,因此chunks()方法中用了一个生成器yield

f.write(line)

  1. 9/5-1.版本和版本区别
    1. path

from django.urls import path

不支持正则,精准匹配

有5个普通转换器

      1. 普通转换器

int:匹配整型

str:匹配字符串

slug:匹配除/的字符

path:匹配路径,除了开头第一个?号都能匹配

uuid:匹配uuid格式

      1. 自定义转换器

class Test:

regex='[0-9]{4}'

def to python(self,value):

#写一堆处理

value=value+'aaa'

return value

def to_url(self,value):

#用于反向解析

return'%04d'%value#%04d用于接受小于四位的数并拿0填充至四位

from django.urls import register_converter

register_converter(Test,'ttt')

path('index/<ttt:year>',views.index,name='index')

    1. re_path

用法类似于url,可以使用正则,不多赘述

  1. 9/6-模板渲染
    1. filter{{}}

1.变量:句点符(.),深度查询(可以点到方法,不需要加括号,但该方法只能是无参函数),对列表、字典使用的时候相当于[].

2.过滤器:

1.date过滤器{{now(使用datetime模块获取的当前时间)|date:'Y-m-d H:i:s'}}

2.如果一个变量是false或者为空,使用给定的默认值,一般为空字符串,否则使用变量的值,例如,string=''

default过滤器{{string|default:'字符串没有值'}}#页面显示字符串没有值

3.返回值的长度,它对字符串和列表都有作用string='chenyoude'

length过滤器{{string|length}}

4.将至格式化为文件尺寸,例如num=1024*1024

filesizeformat过滤器{{num|filesizeformat}}

{{1024|filesizeformat}}

5.切片操作

slice过滤器{{'chenyoude'|slice:'1:9'}}

如果字符串字符多于指定的字符数量,那么会被截断,截断的字符串将以可以翻译的省略号序列('...')结尾

truncatechars过滤器{{'chenyoude'|truncatechars:5}}

truncatewords过滤器{{'chen you de|truncatewords:2}}

6.安全处理

safe过滤器:{{string|safe}}

可以在视图层处理相当于safe过滤器的作用

from django.utils.safestring import mark_safe

sting=mark safe(string)

7.相加过滤器(可以传两个参数)

add过滤器{{1|add:'1'}}#页面显示结果2

    1. tag{%%}

{%for i in l%}

{{forloop}}#forloop必须得在for循环中使用

{%empty%}#如果列表为空则输出该行

{%endfor%}

{%if条件%}#if语句支持and、or、==、>、<、!=、<=、>=、in、not in、is、is not判断.

{%endif%}

{%with dic=dic.name...%}#with一般用于dic.name...过长的时候用于重命名

#{%with dic.name...as dic%}该写法也是正确

{%endwith%}

    1. xss(cross-site scripting attack)跨站脚本攻击

xss攻击,跨站脚本攻击:即我们如果不对上传至数据库的数据进行处理,我们可以输入一个标签到数据库,然后数据库拿出数据对页面进行渲染,如果在页面渲染的时候对数据也不进行处理,这个时候我们输入的标签数据则会对页面进行渲染

    1. 自定义过滤器

1.先去setting里配置app

2.在app目录下创建一个templatetags模块

3.写py文件(my_test.py)

4.from django import template

5.register=template.Library()

6.写函数addstr(用requester.filter()装饰)#函数至少一个形参,最多一个形参,第一个形参一般用于使用该函数的值

7.模板:自行添加语句

6.{%load my_test%}#使用该行下载我们自定义的过滤器

9.{{'cyd'|addstr:'ishandsome'}}

    1. 自定义标签

1.先在settings里面配置app

2.在app目录下创建一个templatetags模块

3.写py文件(my_test.py)

4.from django import template

5.register=template.LIvrary()

6.写函数:

@register.simple_tag(name='yy')

def my_sum(x,y,z,i):

return x+y+z+i

7.模板:

8.{%load my_test%}

9.{%yy 1 2 3 4%}#以空格做分割,传参数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值