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使用socket连接远程服务器的方法
Apr 29 Python
python文件的md5加密方法
Apr 06 Python
浅述python中argsort()函数的实例用法
Mar 30 Python
Python利用Django如何写restful api接口详解
Jun 08 Python
用Python解决x的n次方问题
Feb 08 Python
python实现桌面气泡提示功能
Jul 29 Python
pytorch中的embedding词向量的使用方法
Aug 18 Python
导入tensorflow时报错:cannot import name 'abs'的解决
Oct 10 Python
python3 requests库实现多图片爬取教程
Dec 18 Python
Pycharm配置lua编译环境过程图解
Nov 28 Python
分享PyCharm最新激活码(真永久激活方法)不用每月找安装参数或最新激活码了
Dec 27 Python
基于PyInstaller各参数的含义说明
Mar 04 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
《APMServ 5.1.2》使用图解
2006/10/23 PHP
随时给自己贴的图片加文字的php代码
2007/03/08 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
浅析使用Turck-mmcache编译来加速、优化PHP代码
2013/06/20 PHP
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
Table冻结表头示例代码
2013/08/20 Javascript
jquery获取颜色在ie和ff下的区别示例介绍
2014/03/28 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
JavaScript对象参数的引用传递
2016/01/14 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
2016/01/22 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
基于Bootstrap 3 JQuery及RegExp的表单验证功能
2017/02/16 Javascript
jquery将标签元素的高设为屏幕的百分比
2017/04/19 jQuery
jQuery实现动态添加、删除按钮及input输入框的方法
2017/04/27 jQuery
web前端vue之CSS过渡效果示例
2018/01/10 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
Angular4.x Event (DOM事件和自定义事件详解)
2018/10/09 Javascript
使用element-ui table expand展开行实现手风琴效果
2019/03/15 Javascript
15分钟上手vue3.0(小结)
2020/05/20 Javascript
Python实现队列的方法
2015/05/26 Python
python opencv minAreaRect 生成最小外接矩形的方法
2019/07/01 Python
python实现windows倒计时锁屏功能
2019/07/30 Python
Python paramiko模块使用解析(实现ssh)
2019/08/30 Python
Python unittest生成测试报告过程解析
2020/09/08 Python
what is the difference between ext2 and ext3
2015/08/25 面试题
毕业自荐信
2013/12/16 职场文书
自荐信格式简述
2014/01/25 职场文书
大学生军训感想
2014/02/16 职场文书
继承公证书样本
2014/04/04 职场文书
十岁生日答谢词
2015/01/05 职场文书
幼儿教师师德师风自我评价
2015/03/05 职场文书
个人求职信格式范文
2015/03/20 职场文书
2015年劳动部工作总结
2015/05/23 职场文书
单位收入证明范本
2015/06/18 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书