Django视图、传参和forms验证操作


Posted in Python onJuly 15, 2020

简介视图

主要内容:URLconf、HttpRequest对象、HttpResponse

1)视图接受Web请求并且返回Web响应

2)视图就是一个python函数,被定义在views.py中

3)响应可以是一张网页的HTML内容,一个重定向,一个404错误等等

4)在http请求中产生两个核心对象,所在位置是,django.http:

http请求:HttpRequest对象

http响应:HttpResponse对象

这两个对象是由django帮我构造的

URLconf相关概述

• 在settings.py文件中通过ROOT_URLCONF指定根级url的配置

• urlpatterns是一个url()实例的列表,我们把它称为路由,它里面的每一个url()我们称为路由配置

• 一个url()对象包括:正则表达式、视图函数、可选参数、名称name

• 请求的url被看做是一个普通的python字符串,进行匹配时不包括get或post请求的参数及域名。

字典Context={}上下文,在html页面里有参数时要封装到字典里作为render的第三个参数返回也可以直接写字典存变量 context={'name':'lm'}

在html模板语言里:模板语言注释{#显示。。#} 在模板里显示变量时用{{'name'}}用来显示变量。(取消字典context的{})

for循环:

{% for num in b %} b为列表

{{num}}

{%endfor%}<br>

{% for key,value in c.items %} #c为字典

{{key}}---->{{value}}

{% endfor %}<br>

{% if 条件 %} 满足条件执行语句{% else %}不满足条件的语句 {% endif %}

URL的反向解析(软连接)

如果在视图、模板中使用硬编码的链接,在urlconf发生改变时维护是一件非常麻烦的事情

解决:在做链接时,通过指向urlconf的名称,也就是我们配置的namespace和name,动态生成链接地址

网页模板语言的路径的表示"{% url 'namesapce(分发路径的名字):name(url的别名)'%}"

视图:使用django.core.urlresolvers.reverse()函数

在模板语言中()[]是非法的用就报错

路由配置

include这个方法,会把经过主路由匹配成功后剩下的路径,分发给我们app里面的子路由去处理,它并不是严格匹配,正则是没有结束符$的,第一个参数代表分发给哪个路由配置文件去处理,第二个参数namespace代表反向解析,和url()当中name参数作用类似。

主路由配置:主路由就是我们项目设置文件夹当中和settings.py文件同级的那个urls.py文件里面的urlpatterns。把主路由当作调度分发路由的工具。 首页放在主路由

子路由:分成不同的app模块(app里配置urls.py文件)主路由判断分子路由操作

urlpatterns 里的include为子路由分发。主路由的urlpatterns里的url(r'^news/',include('news.urls',namespace="news")) news为应用模块

路径传参(位置和关键词)模板语言在大括号里{% url 'news:news_date'2018 4 20 %}

未命名正则表达式组传参(位置传参):url(r'/(\d+)/(\d+)/(\d+)/$')

Django视图、传参和forms验证操作

视图函数如下

Django视图、传参和forms验证操作

命名正则表达式组传参(关键字传参):视图函数中的参数可以是乱序

url(r'/(?P<year>\d+)/(?P<mouth>\d+)/(?p<day>\d+)/$')

Django视图、传参和forms验证操作

请求方式传参:模版语言传参:{% url 'news:news_date'%}?name=lm&a=5 与url路径无关

Django视图、传参和forms验证操作

所有form表单提交都需要forms验证,再前端form表单需要制定提交路径 action="{% url 'users:user_register' %}"

与方式method="post"

在user的app中创建forms.py文件,填写验证条件

from django import forms
from captcha.fields import CaptchaField
from .models import UserProfile,EmailVerify
 
class UserRegisterForm(forms.Form):
 email = forms.EmailField(required=True,error_messages={
  'required':'邮箱必须填写'
 })
 password = forms.CharField(min_length=3,max_length=20,required=True,error_messages={
  'required': '密码必须填写',
  'min_length':'密码最少得3个',
  'max_length': '密码最多20个',
 })
 captcha = CaptchaField(error_messages={
  'invalid':'验证码错误'
 })

在views.py文件中

from .forms import UserRegisterForm
def user_register(request):
 if request.method == 'GET':
  user_register_form = UserRegisterForm()
  return render(request,'users/register.html',{
   'user_register_form':user_register_form
  })
 else:
  user_register_form = UserRegisterForm(request.POST)#进行验证
  if user_register_form.is_valid():#判断是否合法
   email = user_register_form.cleaned_data['email']#获取request数据
   password = user_register_form.cleaned_data['password']
   user = UserProfile.objects.filter(Q(email=email)|Q(username=email))
   if user:
    return render(request,'users/register.html',{
     'msg':'用户已经存在'
    })
   else:
    a = UserProfile()
    a.username = email
    a.email = email
    a.set_password(password)#加密密码
    a.si_active=False#设置密码未激活,需要邮箱验证激活
    a.save()
  else:
   return render(request,'users/register.html',{
    'user_register_form':user_register_form
   })

获得参数用:zhaoliying=request.GET.get('name',None) GET类字典(可以一键多值用getlist取值) None没有参数默认返回None。前端传到后端的数据都为字符串

CSRF跨站伪造攻击错误。在获取POST方式传递的参数时,要取消错误在form表单里加入 {% csrf_token %}

HttpReqeust对象

下面除非特别说明,属性都是只读的,都是字符串

1)path:一个字符串,表示请求的页面的完整路径,不包含域名和请求参数

2)method:一个字符串,表示请求使用的HTTP方法,常用值包括:'GET'、'POST'

3)encoding:一个字符串,表示提交的数据的编码方式

A)如果为None则表示使用浏览器的默认设置,一般为utf-8

B)这个属性是可写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值

4)GET:一个类似于字典QueryDict的对象,包含get请求方式的所有参数,与url请求地址中的参数对应,位于?后面参数的格式是键值对,如key1=value1。多个参数之间,使用&连接。获得参数用:data = request.GET.get(‘键',默认)获取

5)POST:一个类似于字典QueryDict的对象,包含post请求方式的所有参数。控件要有name属性,则name属性的值为键,value属性的值为键,构成键值对提交。获得参数用:data = request.POST.get(‘键',默认)获取

6)FILES:一个类似于字典的对象,包含所有的上传文件

7)COOKIES:一个标准的Python字典,包含所有的cookie,键和值都为字符串

8)session:一个既可读又可写的类似于字典的对象,表示当前的会话,只有当Django 启用会话的支持时才可用,详细内容见“状态保持”与python字典不同,QueryDict类型的对象用来处理同一个键带有多个值的情况。

关于cookie的操作

1)Cookie,有时也用其复数形式 Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。定义于 RFC2109 和 2965 中的都已废弃,最新取代的规范是 RFC6265 [1] 。(可以叫做浏览器缓存)

2)cookie是服务器设置存储在浏览器的一段文本信息,例如用户登录的时候不用输入密码了。

以上这篇Django视图、传参和forms验证操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python笔记(1) 关于我们应不应该继续学习python
Oct 24 Python
Flask SQLAlchemy一对一,一对多的使用方法实践
Feb 10 Python
Python入门_浅谈逻辑判断与运算符
May 16 Python
python使用正则表达式替换匹配成功的组并输出替换的次数
Nov 22 Python
Windows下将Python文件打包成.EXE可执行文件的方法
Aug 03 Python
Python上下文管理器用法及实例解析
Nov 11 Python
django实现类似触发器的功能
Nov 15 Python
pycharm修改file type方式
Nov 19 Python
在tensorflow中实现屏蔽输出的log信息
Feb 04 Python
Python爬虫爬取杭州24时温度并展示操作示例
Mar 27 Python
python 使用xlsxwriter循环向excel中插入数据和图片的操作
Jan 01 Python
python库Tsmoothie模块数据平滑化异常点抓取
Jun 10 Python
一文解决django 2.2与mysql兼容性问题
Jul 15 #Python
django 模型字段设置默认值代码
Jul 15 #Python
django序列化时使用外键的真实值操作
Jul 15 #Python
Django:使用filter的pk进行多值查询操作
Jul 15 #Python
django models里数据表插入数据id自增操作
Jul 15 #Python
python报错: 'list' object has no attribute 'shape'的解决
Jul 15 #Python
解决运行出现'dict' object has no attribute 'has_key'问题
Jul 15 #Python
You might like
destoon二次开发入门示例
2014/06/20 PHP
php+mysql不用递归实现的无限级分类实例(非递归)
2014/07/08 PHP
PHP开发框架kohana中处理ajax请求的例子
2014/07/14 PHP
ThinkPHP安装和设置
2015/07/27 PHP
jquery提升性能最佳实践小结
2010/12/06 Javascript
js 获取input点选按钮的值的方法
2014/04/14 Javascript
用js格式化金额可设置保留的小数位数
2014/05/09 Javascript
把文本中的URL地址转换为可点击链接的JavaScript、PHP自定义函数
2014/07/29 Javascript
实例详解jQuery Mockjax 插件模拟 Ajax 请求
2016/01/12 Javascript
jQuery ajax方法传递中文时出现中文乱码的解决方法
2016/07/25 Javascript
BootStrap Table对前台页面表格的支持实例讲解
2016/12/22 Javascript
JavaScript实现购物车基本功能
2017/07/21 Javascript
详解微信小程序支付流程与梳理
2019/07/16 Javascript
如何换个角度使用VUE过滤器详解
2019/09/11 Javascript
JavaScript事件冒泡机制原理实例解析
2020/01/14 Javascript
如何使用Javascript中的this关键字
2020/05/28 Javascript
[02:21]DOTA2英雄基础教程 蝙蝠骑士
2013/12/16 DOTA
[01:46]DOTA2上海特锦赛小组赛英文解说KotlGuy采访
2016/02/27 DOTA
[04:17]DOTA2完美盛典,rOtk、BurNIng携手巴图演唱《倔强》
2017/11/28 DOTA
深入理解NumPy简明教程---数组1
2016/12/17 Python
Python实现的文本简单可逆加密算法示例
2017/05/18 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
2018/05/24 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
django模板结构优化的方法
2019/02/28 Python
详解python算法之冒泡排序
2019/03/05 Python
Python3运算符常见用法分析
2020/02/14 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
django中url映射规则和服务端响应顺序的实现
2020/04/02 Python
一个SQL面试题
2014/08/21 面试题
服装机修工岗位职责
2013/12/26 职场文书
诉讼授权委托书
2014/10/15 职场文书
迟到检讨书范文
2015/01/27 职场文书
立春观后感
2015/06/18 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书
《蓝鲸的眼睛》读后感5篇
2020/01/15 职场文书
python flask开发的简单基金查询工具
2021/06/02 Python