语法
请求头ContentType,指的是请求体的编码类型,常见的类型共有3种:
基于form:
<form action="" method="post" enctype=".......">
基于ajax:
$.ajax(function(){
url:
type:
data:
contentTpte: .......
})
基于ajax
var formdata = new FormData();
formdata.append('file',$('#image')[0].files[0]);
$.ajax(function(){
......
data:formdata,
processData: false, // 不处理数据
contentType: false, // 不设置内容类型
.......
})
功能:
class userForm(forms.Form):
name=forms.CharField(min_length=4,lable='名称',error_messages={"required":""},widget=widgets.TextInput(attrs={"class":""}) )
email=forms.EmailField(lable='邮件')
def func():
user=userForm({"name":"li","email":"[email protected]"})
user.is_valid()
.is_valid() 校验
.cleaned_data 返回通过校验的字典类型
.errors 返回校验不通过的字典类型,value是错误描述
在类里面定义:
clean_属性名(self):
…
clean(self):
…
先实例化一个类form=userForm(),
前台就可以直接用{{form.xxxx}}的形式,运行程序会自动渲染对应的html标签
也可以for循环出字段{% for f in form%} {{f}} {%endfor%}
浏览器访问服务器,服务器响应浏览器并发送一个{key:val}的文件保存在终端上
# 设置cookie
response.set_cookie(k,v)
# 获取cookie
request.COOKIES.get(k)
max_age=None, 超长时间,cookie需要延续的时间(以秒为单位)如果参数是\ None`` ,这个cookie会延续到浏览器关闭为止。
expires=None, 超长时间 expires默认None ,cookie失效的实际日期/时间。
path=’/’, Cookie生效的路径,浏览器只会把cookie回传给带有该路径的页面,这样可以避免将 cookie传给站点中的其他的应用。 / 表 示根路径,特殊的:根路径的cookie可以被任何url的页面访问
domain=None, Cookie生效的域名 你可用这个参数来构造一个跨站cookie。 如, domain=".example.com" 所构造的cookie对下面 这些站点都是可读的: www.example.com 、 www2.example.com 和an.other.sub.domain.example.com 。 如果该参数设置为 None ,cookie只能由设置它的站点读取。
secure=False, 如果设置为 True ,浏览器将通过HTTPS来回传cookie。
httponly=False 只能http协议传输,无法被JavaScript获取 (不是绝对,底层抓包可以获取到也可以被覆盖)
path=’/xxxxx’
是一种服务器的会话跟踪技术,为浏览器用户创建一个独有的session对象,用来存储用户信息
设置session
request.session[‘is_login’] = True ,django封装了request.session,当执行了以后将做三个步骤:
1,生成随机字符串
2,response.set_cookie(’ sessionid ',随机字符串)
3,在django表django_session创建一条记录
读取session编码实现:
1,request.COOKIE.get(‘sessionid’) # 123456
2,django_session表中过滤记录: obj = django_session_表.objects.filter(session_key = 123456).first()
3,obj.session_data.get(‘is_login’)
注销session
request.session.flush(), 清理服务器以及浏览器上的记录。当执行了以后实际做了如下操作:
1,request.session.COOKIE.get(‘sessionid’) #0000
2,django_session_表.objects.filter(session_key = 0000).delete()
3,response.delete_cookie(‘sessionid’, 0000)
假设用cokie或者session校验用户,当切换用户的时候采用session有可能导致后登录用户覆盖前面登录用户信息的同时又保留有前面登录用户的其他键值( 低权限和高权限 用户间的权限混淆 ),造成用户权限混淆。对于这种情况,django有自己的用户校验模块:
首先新建一个用户(auth_user表),按步骤创建
python manage.py createsuperuser
这样就生成一个用户信息
auth模块提供多个接口:
验证auth_user表的用户名密码是否一致,验证通过返回一个user对象。authenticate()还包括一个登录需要的属性标识,如果试图登陆一个从数据库中直接取出来不经过authenticate()的User对象会报错的
user = authenticate(username='someone',password='somepassword')
登录
logon(request,user)
登出
logout(request)
是否登录: is_authenticated() 或者 @login_required
超级用户对表进行增删改
首先注册一个超级用户superuser(user.object.create_superuser(**k)),
然后在admin.py设置
from django.contrib import admin
# Register your models here.
from blog import models
admin.site.register(models.UserInfo)
admin.site.register(models.Blog)
admin.site.register(models.Category)
admin.site.register(models.Tag)
admin.site.register(models.Article)
admin.site.register(models.ArticleUpDown)
admin.site.register(models.Article2Tag)
admin.site.register(models.Comment)
最后,在url:xxxxx/admin 登录超级用户,就可以对表进行操作了
django框架下的setting.py
回顾知识点:
1.浏览器请求服务器原理(MTV)
整个过程中按列表顺序依次执行中间件(这里中间件就起到了一个全局的作用)
process_request:
当前中间件的process_request如果做return将直接返回给process_response,起到拦截后面中间件的作用,即不往下一个中间件走
process_response:
必须做return操作
process_view: process_view(self,callback,callback_args,callback_kwargs), 执行这一步时就可以通过callback获取到的视图函数,以下是执行顺序
process_exception: 异常处理