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 ...
随机推荐
- java实现excel表格导出
Java 实现导出excel表 POI 1.首先下载poi-3.6-20091214.jar,下载地址如下: http://download.csdn.net/detail/evangel_z/389 ...
- git-04 同意分支合并
https://blog.csdn.net/boysky0015/article/details/78185879/
- Android 抓取LOG的几种命令【转】
通常调试时候需要抓取log信息,下面几种通过ADB命令来抓取log的方法: USB连接上手机,手机需要其他操作:然后运行ADB工具:输入不同的命令即可抓取对应的LOG信息. 抓取radio LOG信息 ...
- 学JS的心路历程-正规表达式Regular Expression
今天我们来看正规表达式,在谈到为什么需要多学这个之前,先来看个示例. 假设需要判断输入字串是否含有“apple”: var text=“A apple a day keeps the doctor a ...
- c3 新特性
渐变 线性渐变 .line { height: 100px; /*线性渐变语法*/ background-image: linear-gradient( to right,/* ...
- node+mysql简单注册
1前台文件 <!doctype html> <html> <head> <meta charset="UTF-8" /> <t ...
- “2017面向对象程序设计(Java)第就九周学习总结”存在问题的反馈
对于“2017面向对象程序设计(Java)第就九周学习总结”存在问题的反馈 1.博文未写者:高树平 高俊梅 冯小丽 缪召召 王瑞强 宗鹏新 李向龙 马润韬 米奇辉 卯保云——不及时提交博客的同学人数出 ...
- Failed to execute goal org.apache.maven.plugins:maven-surefire-plugin:2.12.4:test (default-test)
这是因为测试代码时遇到错误,它会停止编译.只需要在pom.xml的<project>里添加以下配置,使得测试出错不影响项目的编译.<build> <plugins> ...
- SXSSExcelUtil
package com.numa.util; import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.util ...
- MySql介绍
MySql介绍 标签(空格分隔): MySql MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 ...