Django form表单与请求的生命周期步骤详解
作者:平仄平仄平平仄 发布时间:2023-06-20 06:29:15
标签:django,form,请求,生命周期
Django
中请求的生命周期
HTTP请求及服务端响应中传输的所有数据都是字符串
步骤
用户在浏览器中输入
url
时,浏览器会生成请求头和请求体发给服务器url
经过wsgi
和中间件,到达路由映射表,在路由中一条一条进行匹配视图函数根据客户端的请求查询响应的数据,返回给
Django
Django
把客户端想要的数据做为一个字符串返回给客户端客户端浏览器接收到返回的数据,经过渲染后显示给用户
FBV
一个url
对应一个视图函数
在url
匹配成功之后,会直接执行对应的视图函数。
CBV
一个url
对应一个类
url
匹配成功找到视图函数中对应的类,然后这个类回到请求头中找到对应的Request.Method
如果客户端以post的方式提交请求,就执行类中的post方法如果客户端以get的方式提交请求,就执行类中的get方法
步骤:
服务端发送包含
url
和method的请求,这两个信息都是字符串类型服务端通过路由映射表匹配成功后会自动去找dispatch方法
Django
会通过dispatch反射的方式找到类中对应的方法并执行勒种的方法执行完毕后,会把客户端想要的数据返回给dispatch方法
dispatch方法把数据返回给客户端
form表单
定义:
Django
的表单系统中,所有的表单都继承自django.forms.Form
类
Django
的表单系统
form_obj.as_p #在html网页渲染所有的字段
label#为一个标签添加id号
form_obj.字段 #渲染指定的字段
min_length#绑定字段的最短长度
max_length#绑定字段的最长长度
is_valid()#验证用户输入的信息是否有效,返回一个布尔值
cleaned_data() #清洗数据
error_massage() #定义错误的返回信息
#文件上传:
request.POST.get("file")#获取上传的文件的文件名
request.FILES#获取上传文件的对象结果是一个字段
file_obj.name#获取上传文件在内存中的名字
#上传文件时要使用分片传输的方式
#上传
enctype="multipart/form-data"#form表单的属性里添加
#接收
if request.method=="POST":
file_obj = request.FILES.get("up_file")
fl = open(file_obj.name,'vb')
for i in file_obj.chunks():
fl.write(i)
fl.close()
#可以在class Meta中设定的功能
model = model.UserInfo#显示对于Model的字典,这里显示用户信息表
fields = "__all__"#显示数据表中所有的字段
fields = ["username","age"]#显示数据表的某些指定的字段
exclude = ["email"]#不显示数据表的某些字段
#自定义页面的标签
labels = {"username":"用户名","age":"年龄","email":"邮箱"}
#自定义在标签后面显示的提示帮助信息
help_texts = {"username":"请输入正确的用户名","email":"请输入正确的邮箱"}
#自定义错误信息,用户输入错误时提示
error_messages = {"username":{"required":"用户名不能为空"},"email":{"invalid":"邮箱不能为空"}}
#自定义标签的类型,在这里把email这个输入框的类型更改为email类型
from django import fields as field_widget
field_classes = {}"email":field_widget.EmailField}
#自定义插件(attrs为插件的属性)
from django.forms import widgets as formwidget
widgets = {"username":formwidget.Textarea(attrs={"class":"c1"})}
来源:https://www.cnblogs.com/yanadoude/p/13048725.html


猜你喜欢
- 本文实例为大家分享了python交互式图形编程实例的第三部代码,供大家参考,具体内容如下#!/usr/bin/env python3# -*
- 本文研究的是re模块findall()函数的相关内容,首先看看实例代码:>>> import re >>>
- 实际上关键词叫 微信pushState只能分享落地页 更贴切一点应用场景:vue + vue-routervue-router使用hash模
- canvas 粒子动画介绍何为canvascanvas是HTML5中新增的一个标签,主要是用于网页实时生成图像并可操作图像,它是用JavaS
- 现在获取数组中最大最小值用的越来越多了,于是乎我编了个方法供大家使用。代码如下,若有问题可以与我联系,咱们一起学习一起进步。我们来看下示例一
- Urllib1. Urllib.request.urlopen().read().decode()返回一个二进制的对象,对这个对象进行rea
- 功能输入一个特定格式的时间戳,自动获取前进或者后退多少小时之后的时间附加函数时间戳转换函数def date_time_str_to_long
- 环境配置新建python虚拟环境并激活conda create -n pyqt python=3.8conda activate py36安
- 一个页面执行一次Sql语句的话,不会影响到性能。如果一个页面要执行很多次Sql语句,而且使用的是同一个数据库连接,那么上面的方法可能会影响到
- 简介 开启慢查询日志,可以让MySQL记录下查询超过指定时
- 对Python字符串,除了比较老旧的%,以及用来替换掉%的format,及在python 3.6中加入的f这三种格式化方法以外,还有可以使用
- mysql 8.0.12 的安装,折腾了两天,遇到各种问题,现总结如下:第一步,卸载掉之前安装的MySQL,参考彻底卸载mysql 个人亲测
- 当你安装 MySQL 完后、会有个提示:[root@localhost Desktop]# rpm -ivh MySQL-server-5.
- 一、什么是跨域?跨域问题的出现是因为浏览器的同源策略问题。所谓同源就是必须有以下三个相同点:协议相同、主机相同、端口相同。如果其中有一项不同
- 本文实例讲述了Python3.5运算符操作。分享给大家供大家参考,具体如下:1、运算符的分类2、算术运算符示例代码:#!/usr/bin/e
- 原来是在系统上出了问题.是2003的IIS出现了问题,因为是2003的系统,它对ASP的上传文件做出了200K的限制,解决问题方法如下 :
- 本文研究的主要是Python中的默认参数的相关内容,具体如下。熟悉C++语言的可以知道,C++语言中的默认参数是写在函数声明中的,为语法糖,
- 父组件 <interval-number :number-content="blockHeight" v-if=&
- Python json 错误xx is not JSON serializable解决办法在使用json的时候经常会遇到xxx
- Python最长回文子串1.暴力解法(Brute Method)暴力求解是最容易想到的,要截取字符串的所有子串,然后再判断这些子串中哪些是回