Ajax cookie session form组件
. Cookie是什么
保存在浏览器端的键值对 为什么要有Cookie?
因为HTTP请求是无状态的 Cookie的原理?
服务端可以在返回响应的时候 做手脚
在浏览器上写入键值对(Cookie) 浏览器发送请求的时候会自动携带该网站保存在我浏览器的键值对(Cookie) Django 从请求携带的Cookie中取值:
request.COOKIES.get("is_login")
request.get_signed_cookie(key, default=None, salt="xxx")
Django中设置Cookie:(针对的是响应对象)
rep = HttpResponse()/render(request, "test.html)/redirect()
rep.set_signed_cookie(key, value, salt="xxx", max_age=)
Django中删除Cookie:(注销)
rep.delete_cookie(key) . Session是什么
Session保存在服务端的键值对 Session依赖于Cookie dsadasdsadsafsjkndf: {"is_login": , "name": "xiaohei", "age":}
dsaasdaknfgreryywdf: {"is_login": , "name": "xiaobai", "age":}
wqrqrteknfgzddasqfg: {"is_login": , "name": "xiaohui", "age":} 给浏览器写入Cookie:
sessionid:wqrqrteknfgzddasqfg . 从用户发来的请求的Cookie中 根据 sessionid 取值, 取到 wqrqrteknfgzddasqfg
. 根据特殊字符串找到对应的 Session 数据 --> {"is_login": , "name": "xiaohui", "age":}
. request.session.get("is_login") --> 从Session取值 Django中设置Session:
request.session["is_login"] =
request.session.set_expiry() # 设置超时时间 (Cookie和Session数据的) 在settings.py中设置,每次请求都刷新Session超时时间
SESSION_SAVE_EVERY_REQUEST = True Django中删除Session:
request.session.flush() 清除Cookie和Session数据 request.session.clear_expired() 将所有Session失效日期小于当前日期的数据删除 今日内容
AJAX . 预备知识 JSON . 我们之前已经学过的发请求的方式:
. 直接在地址栏输入URL回车 GET请求
. a标签 GET请求
. form表单 GET/POST请求
. AJAX GET/POST请求 . AJAX 特点:
. 异步
. 局部刷新浏览器(偷偷发请求)
. 回顾了一下json数据格式
. JS对象 和 json数据格式的互相转换
. Python中数据 和 json数据格式的互相转换
. AJAX
. 我们前端往后端发请求的方式:
. 直接在地址栏输入URL
. a标签
. form表单
. AJAX HTTP请求的类型:
GET
POST
. AJAX特点:
. 异步
. 局部刷新(偷偷发请求) . AJAX缺点:
请求零碎,滥用对服务端压力大 . jQuery封装的AJAX方法:
先导入 jquery.js $.ajax({
url: "/test/",
type: "post",
data: {"key": "value", "key2":[[, , ], [, , ]]},
success: function(arg){
// 请求得到响应的时候,自动执行这个回调函数
console.log(arg);
}
}) 今日内容
. form组件的介绍 之前web开发的模式,以注册为例:
. 要有一个注册的页面,页面里面要有form表单 --> 生成HTML代码
. form表单要能提交数据到后端,后端要做有效性校验 --> 数据有效性校验
. 要把校验的提示信息展示在页面上 --> 校验信息返回并展示,保存原来填写的内容 关于校验:
. 前端通过JS代码做校验 --> 最好有
. 后端做校验 --> 必须要有(因为前端的校验可以被跳过) . form组件的用法
. from django import forms
, 定义一个form类
class RegForm(forms.Form):
user = forms.CharField()
pwd = forms.CharField()
email = forms.EmailField() 生成HTML:
. 实例化一个form对象, 传递到模板语言中
. 在目标语言中调用form对象的响应方法和属性 三种方式:
. {{ form_obj.as_p }}
. 单独写
{{ form_obj.pwd.label }}
{{ form_obj.pwd }} 做校验:
. form_obj = RegForm(request.POST)
. form_obj.is_valid() 内置的正则校验器的使用
mobile = forms.CharField(
label="手机",
# 自己定制校验规则
validators=[
RegexValidator(r'^[0-9]+$', '手机号必须是数字'),
RegexValidator(r'^1[3-9][0-9]{9}$', '手机格式有误')
],
widget=widgets.TextInput(attrs={"class": "form-control"}),
error_messages={
"required": "该字段不能为空",
}
) 看源码: form_obj.is_valid()都干了什么? self._errors = ErrorDict() --> {}
self.cleaned_data = {} self.fields.items()
字段名 字段对象 如果有错误:
self._errors["name"] = "" 没有报错:
self.cleaned_data["name"] = value(用户填写的值) 注意:
钩子函数(hook)的使用 def clean_xx():
"""具体字段的自定义校验方法"""
pass def clean():
"""全局的自定义校验方法"""
pass errors: <ul class="errorlist">
<li>name
<ul class="errorlist">
<li>不符合社会主义核心价值观!</li>
</ul>
</li>
<li>__all__
<ul class="errorlist nonfield">
<li>两次密码不一致</li>
</ul>
</li>
</ul>
今日内容
中间件:http://www.cnblogs.com/liwenzhou/p/8761803.html . URL的白名单 url = ["/xx/", "/oo/", "/haha/"]
. 登陆之后才能访问某些URL 之前使用装饰器 中间件的定义:
wsgi之后 urls.py之前 在全局 操作Django请求和响应的模块! 中间件的使用:
5个固定的方法
process_request(self, request)
执行顺序:
按照注册的顺序(在settings.py里面设置中 从上到下的顺序)
何时执行:
请求从wsgi拿到之后
返回值:
返回None,继续执行后续的中间件的process_request方法
返回response , 不执行后续的中间件的process_request方法 process_response
执行顺序:
按照注册顺序的倒序(在settings.py里面设置中 从下到上的顺序)
何时执行:
请求有响应的时候
返回值:
必须返回一个response对象 process_view(self, request, view_func, view_args, view_kwargs):
执行顺序:
按照注册的顺序(在settings.py里面设置中 从上到下的顺序)
何时执行:
在urls.py中找到对应关系之后 在执行真正的视图函数之前
返回值:
返回None,继续执行后续的中间件的process_view方法
返回response, process_exception(self, request, exception)
执行顺序:
按照注册顺序的倒序(在settings.py里面设置中 从下到上的顺序)
何时执行:
视图函数中抛出异常的时候才执行
返回值:
返回None,继续执行后续中间件的process_exception
返回response, process_template_response(self, request, response)
执行顺序:
按照注册顺序的倒序(在settings.py里面设置中 从下到上的顺序)
何时执行:
视图函数执行完,在执行视图函数返回的响应对象的render方法之前
返回值:
返回None,继续执行后续中间件的process_exception
返回response, Django调用 注册的中间件里面五个方法的顺序:
. process_request
urls.py
. process_view
view
. 有异常就执行 process_exception
. 如果视图函数返回的响应对象有render方法,就执行process_template_response
. process_response Django已经学过的知识点:
. Urls.py 路由系统: 正则
分组匹配 --> 位置参数
分组命名匹配 --> 关键字参数 分级路由
include 给路由起别名
name="xx" 反向解析url
view
from django.urls import reverse reverse("xx", args=[, , ])
reverse("xx", kwargs={”k": "v"}) 自取其辱 . 视图 views.py
request
request.method
request.GET --> URL里面的参数
request.POST --> post请求的数据 request.path_info --> 路径
request.get_full_path() --> 路径加路径的参数 response
新手必备3件套
render(request, "xx.html", {“k”: "v", ...})
HttpResponse("响应")
redirect("/index/")
redirect("http://www.luffycity.com") from django.http import JsonResponse
JsonResponse() FBV和CBV 函数装饰器和方法装饰器的区别 . 模板 filter
内置的filter方法
自定义的filter方法 tag
内置的tag
自定义的simpleTag
自定义的inclusionTag 母版和继承 {% extends ‘base.html’ %} {% block page-main %}
{% block small %}
{% endblock small %}
{% endblock page-main %} 组件 {% include nav %} 静态文件相关的tag 在模板语言里面反向解析url {% url 'url的别名' xx %} . ORM 对应关系
类 --> 数据表
对象 --> 数据行
属性 --> 字段 Django连接MySQL数据库的步骤:
. 手动创建库
. 配置settings.py中数据库的连接信息
. 修改settings.py同目录下的__init__.py文件,添加两句
import pymysql
pymysql.install_as_MySQLdb()
. 在app下面的models.py中定义类,类一定要继承mdoels.Model
. 执行两句命令
. python manage.py makemigrations
. python manage.py migrate 操作数据表 操作数据行(增删改查)
单表
外键
多对多
一对一 ORM高级:
常用字段和方法
必知必会13条
神奇的双下划线
跨表的正向查询反向查询 F和Q 聚合和分组 事务 执行原生的SQL语句 . Cookie和Session,分页 . AJAX $.ajax({
url: “”,
type: "post",
data: {"k1": JSON.stringify([,,])},
success:function(data){ }
})
. form表单 . 中间件
Ajax cookie session form组件的更多相关文章
- python全栈开发day72-django之Form组件
一.ajax 1. 复习JSON 1. JSON是什么? 一种数据格式,和语言无关的数据格式. 2. Python里面转换 1. Python对象 --> 字符串 import json 字符串 ...
- Web框架之Django_08 重要组件(form组件、cookie和session组件)
摘要: form组件 cookie组件 session组件 一.form组件 form介绍我们之前在html页面中利用form表单向后端提交数据时候,都需要对用户的输入进行校验,比如校验用户是否输入正 ...
- 探索form组件和cookie,session组件
一. 实现注册功能 后端代码: from django.shortcuts import render,HttpResponse,redirect from app01 import models C ...
- Form组件 cookie和session
django form组件 1.渲染标签 2.校验数据 3.展示信息 第一步需要一个form类 from django import forms class MyForm(forms.Form): n ...
- Django form组件 与 cookie/session
目录 一.form组件 二.cookie.session 返回Django 组件 一.form组件 1.1 以注册功能为例 注册功能 1.渲染前端标签获取用户输入 --> 渲染标签 2.获取用户 ...
- form组件及cookie和session
多对多关系表的三种创建方式 1.全自动创建 优势:不需要你手动创建第三张表 不足:由于第三张表不是你手动创建的,也就意味着,第三张表字段是固定的无法更改 class Book(models.Model ...
- form组件注册ajax登录auth认证及验证码
本项目采用django自带的数据库 项目文件 models.py from django.db import models from django.contrib.auth.models import ...
- 利用Form组件和ajax实现的注册
一.注册相关的知识点 1.Form组件 我们一般写Form的时候都是把它写在views视图里面,那么他和我们的视图函数也不影响,我们可以吧它单另拿出来,在应用下面建一个forms.py的文件来存放 2 ...
- django form组件 cookies,session
django form组件 渲染标签 就是组件里面的字段在前端展示叫做渲染标签 校验数据 用户输入的数据提交给后端组件叫做校验数据 forms组件中定义的字段都是必须传值的(required=Tr ...
随机推荐
- numpy-帮助文档 & 速查表.md
目录 转相关资料: 速查表 速查代码 转相关资料: 官方手册 易佰教程 gitbook ZMonster's Blog 速查表 速查代码 # -*- coding: utf-8 -*- "& ...
- vb的VSFlexGrid控件
多行选中 VSFlexGrid的SelectionMode = flexSelectionListBox,现在可以配合Ctrl进行多行选择 循环取值 用vsflexgrid.SelectedRows ...
- C#中Graphics的画图代码【转】
我要写多几个字上去 string str = "Baidu"; //写什么字? Font font = Font("宋体",30f); //字是什么样子的? B ...
- python批量操作Linux服务器脚本,ssh密码登录(执行命令、上传、下载)(一)
-*- paramiko.util.log_to_file( ssh = paramiko.SSHClient() ssh.set_missing ...
- anchor_generator.proto:11:3: Expected "required", "optio nal", or "repeated"
转自:https://github.com/tensorflow/models/issues/1834 When I use the commond " protoc object_dete ...
- Java happen-before
下面是happens-before原则规则: 程序次序规则:一个线程内,按照代码顺序,书写在前面的操作先行发生于书写在后面的操作: 锁定规则:一个unLock操作先行发生于后面对同一个锁额lock操作 ...
- Repeater - 重复器
Repeater - 重复器,用来展示泛型集合中的数据 五大模板:1.HeaderTemplate - 头模板,加载时会在开始执行一次2.FooterTemplate - 脚模板,加载时会在最后执行一 ...
- struts原理图
n the diagram, an initial request goes to the Servlet container (such as Jetty or Resin) which is pa ...
- openstack 资料
调用流程 https://blog.csdn.net/bill_xiang_/article/details/72909927
- vue路由传参
console.log( _this.$route.params.id)接收参数 <div class="baoming"><router-link :to=&q ...