11S

ajax是什么?是用js异步传输xml语言. ajax是浏览器向服务端发请求的一种方式.


urlencoded类型的请求数据放在request.POST中,json格式的数据从request.body中获取,request.POST中为空.上传文件的formdata类型的数据放在request.FILES中,


设置cookie: http_response_obj.set_cookie('is_login':1,max_age=60*60*7)
后台获取cookie: request.COOKIES.get('is_login')

数据库初始化迁移的时候默认有一堆表,其中一个auth_user表, 是django自带的认证表,必须使用djaong的用户表auth_user 才能用认证组件
    导入 from django.contrib import auth
    from django.contrib.auth.models import User
    一些方法创:建超级用户pyhton manage.py createsuperuser
        认证是否有这个用户auth.authenticate(username=xxx,password=xxx) 
                查询成功返回user_obj,
                查询失败返回none
    auth.login(request,user_obj)
            login本质是做了request.session['user_id']=user_obj.pk 
    request.user=user_obj
            request.user
            没login前request.user默认是匿名用户对象,
            auth.login()后 request.user就是当前登录用户obj
    requet.user是全局变量,在模板中,视图中都可以直接使用
                request.user.id
                request.user.username
                request.user.is_acitive
    auth.logout(request) 注销
            本质做的是request.sesion.flush()
    auth.login(request,user_obj) login本质是做了request.session['user_id']=user_obj.pk 
    # request.user就是当前登录用户object
    没loing前request.user默认是匿名用户对象,auth.login()之后就是当前登录用户对象.
    Django将请求解包成reqeust对象.每次请求都会解包成一个request对象,上次的request对象已经结束了.所以user不能存在requst中只能存在session里,每次请求来的时候会从session中取. 如果没有登录reques.user就是匿名对象,如果登录了就将request.user=user_obj, use_obj就是auth_user表的一条记录.


MVC,全名是Model View Controller,是一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有低耦合性低、高重用、生命周期成本低等优点。
    MTV: Django的MTV框架的设计模式借鉴了各大语言都通用的模型MVC框架的思想,也将软件架构分成三部分,来降低各个部分之间的耦合性。
    Django框架的不同之处在于它拆分的三部分为:Model(模型)、Template(模板)和View(视图),也就是MTV框架。
    Model(模型):负责业务对象与数据库的对象(ORM) 
    Template(模版):负责如何把页面展示给用户
    View(视图):负责业务逻辑,并在适当的时候调用Model和Template
    
    另外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template.
    
    
# a检查会话session的key在数据库中是否存在
request.session.exists("session_key")
# 所有 键、值、键值对
request.session.keys()
request.session.values()
request.session.items()
# 将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()

# 删除当前会话的所有Session数据
request.session.delete()
  
# 删除当前的会话数据并删除会话的Cookie。
request.session.flush() 
    这用于确保前面的会话数据不可以再次被用户的浏览器访问
    例如,django.contrib.auth.logout() 函数中就会调用它。

# 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
    * 如果value是个整数,session会在些秒数后失效。
    * 如果value是个datatime或timedelta,session就会在这个时间后失效。
    * 如果value是0,用户关闭浏览器session就会失效。
    * 如果value是None,session会依赖全局session失效策略。

如果要添加响应头信息, 如何添加?
Httpresponse对象[xx] = xx
即 响应对象按字典形式添加内容
def login(request):    
    ret = HttpResponse('okkk')  # 响应体内容为okkk
    ret['name'] = 'alex'  # 在响应头中添加name = alex  那么在响应头中就可以看见name:alex
    return ret
在响应头中添加cookie
ret.set_cookie('logined', 'yes')

总结:
    外键正向查:找书的出版社.
    方法1.基于对象: 对象.关联字段.字段, book_obj.publisher.name
    方法2.基于双下: 关联字段__字段, publisher__name 

    外键反向查: 找出版社有哪些书
    方法1.基于对象:obj.小写表名_set, publisher_obj.book_set.all() --反向查用小写表名_set,等价于publisher_obj.books.all()
    方法2.基于双下:表名__字段, Publisher结果集.values_list("books__title")
            (ps:结果集才有values或value_list方法,单个对象没有这个方法)



用auth模块,先authenticate(username=username,password=password),认证后再login(request,user)才是登录,login之后才会生成session.auth模块登录后自动写session. 
如果不用auth模块,要在通过数据库查询后后自己写session: if user_obj: request.session['is_login':1]


rediret('/login/')的本质是给响应设置响应头,让他定位到另一个页面.

    获取不加盐的cookie
    request.COOKIES['key'] 
    获取加盐的cookie
    request.get_signed_cookie(key,default=RAISE_ERROR,salt='', max_age=None)  --参数:
    default: 默认值
    salt: 加密盐
    max_age: cookie在浏览器中的有效期 多少秒

为什么要用httpResponse对象设置cookie,因为cookie的本质是设置http响应头headers,所以要用http对象来设置.


res={xx:xx,xx:xx}
return JsonResponse(res) #JsonResponse自动给res反序列化再发送

ajax总结:
    ajax基于js和xml:使用js用异步的方式传输xml的格式.
    他的异步体现在,发了一个请求不用等结果,就发另一个请求.
    $.ajax中发送data{},在视图函数中有request.POST.get('key')来取;
    如果data的字典中,有键值对的value是非字符串,要stringfy序列化,在视图函数中json.loads反序列化取;
    视图函数中return JSONresponse和response的区别:JSONresponse会自动反序列化.如果用response需要HttpResponse(json.dumps(res));
    $.ajax({url:xxx,type:xxx,data:{k1:v1,k2:v2}}, data中有非基本数据类型,要先序列化
    success:function(){}, # success—回调函数,操作成功执行的函数
    error:function(){}) # error--回调函数,操作失败的函数,成功还是失败根据返回的状态码判断
    ajax发请求的时候不通过form,所以可以不用form表单
    怎么发ajax?jquery中: $.ajax(….)


使用form流程:
    写一个form类.,继承forms.Form,里面写字段,如name,pwd  字段对应html的name
    视图函数中创建form对象. form_obj = RegForm()空form表格 或 form对象= form类名(request.POST)  把POST提交的数据传到form表单中.
    is_valid校验通过后,cleaned_data取数据.
    模板中用{form_obj}渲染出form表单
        {{ form_obj.as_p }}   ——》自动生成多个p标签  包含label input框
        {{ form_obj.user }}   ——》 生成某个字段的input框
        {{ form_obj.errors }}     ——》表单的所有错误信息,放ul和li里面
        {{ form_obj.user.errors }}     ——》 某个字段的所有错误信息
        {{ form_obj.user.errors.0 }}   ——》 某个字段的错误信息的第一个,比如长度不够格式也不对,只显示第一个错误长度不够.

form表单的select下拉框的choices取值问题:下拉框取值的3种取法.
    1.取固定的choices. 
        widget = widgets.Select(choices=((1, 'alex'), (2, 'max'), (3, '云凤丁'))))  # 固定的choice
    2.从数据库中某个字段.
        widget=widgets.Select(choices=models.Campuses.objects.values_list('id', 'name'))  # 从数据库中取. 但是弊端是无法实时更新,要实时更新需要重写init
    3.用ModelChoiceFeild类型    
        用ModelChoiceFeild可以实时更新,但是下拉框只显示object不能显示中文,要显示中文需要重写__str__方法.如果表单中有2个以上的ModelChoiceFeild就没法处理.所以不推荐使用.
        
    style="background-color: #20e940;"

style="background-color: #1dd5b0;"

    
form常用字段:
    user =forms.CharField(label='用户名', min_length=6)
    pwd = forms.CharField(label='密码', min_length=3)
radioSelect :
    gender = forms.fields.ChoiceField(
        choices=((1, ""), (2, ""), (3, "保密")),
        label="性别",
        initial=3,
        widget=forms.widgets.RadioSelect()
        )
多选SelectMultiple:
    hobby = forms.fields.MultipleChoiceField
        (
        choices=((1, "篮球"), (2, "足球"), (3, "双色球"), ),
        label="爱好",
        initial=[1, 3],
        widget=forms.widgets.SelectMultiple())

单选checkbox
    keep = forms.fields.ChoiceField(
        label="是否记住密码",
        initial="checked",
        widget=forms.widgets.CheckboxInput()
    
多选checkbox
    hobby = forms.fields.MultipleChoiceField(
        choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
        label="爱好",
        initial=[1, 3],
        widget=forms.widgets.CheckboxSelectMultiple()
        )
    
    7FF09E
如果前端is_valid校验不通过,会生成错误form_obj.errors


form表单校验的4种方法
    1.字段默认的校验
    2.在validators中加正则
    3.在validators中加校验的函数名
    4.钩子函数 

重写错误信息:
username = forms.CharField(
    label='用户名',
    min_length=6,
    error_messages={
        "required": "不能为空",
        "invalid": "格式错误",
        "min_length": "用户名最短8位"
    })


    
form小结;
    form能做什么
    form的定义和使用流程
    有哪些字段
    choices的取值3种取值方式
    字段有哪些常用参数
        参数
        label        中文的提示 
        initial      初始值
        min_length   最小长度
        max_length   最大长度
        required     是否是必填的  
        disabled     是否不可修改
        error_messages = {
        'min_length' : '太短了''max_length' : '够长了'
        'required':   '不能为空'
        }
        validators = [ 校验器1,校验器2 ]

    form在视图中的使用
    form在模板中的渲染
    form校验的4种方法
    


request对象:存储这次请求所有请求信息:# django将请求报文中的请求行、首部信息、内容主体封装成 HttpRequest类中的属性

post:键值对的值是多个的时候,比如checkbox类型的input标签,select标签,需要用:request.POST.getlist("hobby")来获取

HttpRequest.META  请求头,一个标准的Python 字典,包含所有的HTTP 首部。具体的头部信息取决于客户端和服务器

 reqeust属性之HttpRequest.FILES
                        一个类似于字典的对象,包含所有的上传文件信息。如果上传的是文件,用request.FILES获取内容.
                        FILES 中key为<input type="file" name="" /> 中的name,值则为对应发送的内容
                      FILES 只有在请求的方法为POST且提交的<form> 带有enctype="multipart/form-data" 的情况下才会包含数据。否则,FILE是空
                    
request属性之HttpRequest.user(用户认证组件下使用)  #user 只有当Django 启用 AuthenticationMiddleware 中间件时才可用。
                        一个 AUTH_USER_MODEL 类型的对象,表示当前登录的用户。
                      如果用户当前没有登录,user 将设置为 django.contrib.auth.models.AnonymousUser 的一个对象。你可以通过 is_authenticated() 来判断                    


redircet重定向的状态码有301和302, 区别:
                        301:表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容覆盖旧地址.

                        302:表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址
    
    
View Code
ajax是什么?是用js异步传输xml语言. ajax是浏览器向服务端发请求的一种方式.


urlencoded类型的请求数据放在request.POST中,json格式的数据从request.body中获取,request.POST中为空.上传文件的formdata类型的数据放在request.FILES中,


设置cookie: http_response_obj.set_cookie('is_login':1,max_age=60*60*7)
后台获取cookie: request.COOKIES.get('is_login')

数据库初始化迁移的时候默认有一堆表,其中一个auth_user表, 是django自带的认证表,必须使用djaong的用户表auth_user 才能用认证组件
    导入 from django.contrib import auth
    from django.contrib.auth.models import User
    一些方法创:建超级用户pyhton manage.py createsuperuser
        认证是否有这个用户auth.authenticate(username=xxx,password=xxx) 
                查询成功返回user_obj,
                查询失败返回none
    auth.login(request,user_obj)
            login本质是做了request.session['user_id']=user_obj.pk 
    request.user=user_obj
            request.user
            没login前request.user默认是匿名用户对象,
            auth.login()后 request.user就是当前登录用户obj
    requet.user是全局变量,在模板中,视图中都可以直接使用
                request.user.id
                request.user.username
                request.user.is_acitive
    auth.logout(request) 注销
            本质做的是request.sesion.flush()
    auth.login(request,user_obj) login本质是做了request.session['user_id']=user_obj.pk 
    # request.user就是当前登录用户object
    没loing前request.user默认是匿名用户对象,auth.login()之后就是当前登录用户对象.
    Django将请求解包成reqeust对象.每次请求都会解包成一个request对象,上次的request对象已经结束了.所以user不能存在requst中只能存在session里,每次请求来的时候会从session中取. 如果没有登录reques.user就是匿名对象,如果登录了就将request.user=user_obj, use_obj就是auth_user表的一条记录.


MVC,全名是Model View Controller,是一种软件架构模式,把软件系统分为三个基本部分:模型(Model)、视图(View)和控制器(Controller),具有低耦合性低、高重用、生命周期成本低等优点。
    MTV: Django的MTV框架的设计模式借鉴了各大语言都通用的模型MVC框架的思想,也将软件架构分成三部分,来降低各个部分之间的耦合性。
    Django框架的不同之处在于它拆分的三部分为:Model(模型)、Template(模板)和View(视图),也就是MTV框架。
    Model(模型):负责业务对象与数据库的对象(ORM) 
    Template(模版):负责如何把页面展示给用户
    View(视图):负责业务逻辑,并在适当的时候调用Model和Template
    
    另外,Django还有一个urls分发器,它的作用是将一个个URL的页面请求分发给不同的view处理,view再调用相应的Model和Template.
    
    
# a检查会话session的key在数据库中是否存在
request.session.exists("session_key")
# 所有 键、值、键值对
request.session.keys()
request.session.values()
request.session.items()
# 将所有Session失效日期小于当前日期的数据删除
request.session.clear_expired()

# 删除当前会话的所有Session数据
request.session.delete()
  
# 删除当前的会话数据并删除会话的Cookie。
request.session.flush() 
    这用于确保前面的会话数据不可以再次被用户的浏览器访问
    例如,django.contrib.auth.logout() 函数中就会调用它。

# 设置会话Session和Cookie的超时时间
request.session.set_expiry(value)
    * 如果value是个整数,session会在些秒数后失效。
    * 如果value是个datatime或timedelta,session就会在这个时间后失效。
    * 如果value是0,用户关闭浏览器session就会失效。
    * 如果value是None,session会依赖全局session失效策略。

如果要添加响应头信息, 如何添加?
Httpresponse对象[xx] = xx
即 响应对象按字典形式添加内容
def login(request):    
    ret = HttpResponse('okkk')  # 响应体内容为okkk
    ret['name'] = 'alex'  # 在响应头中添加name = alex  那么在响应头中就可以看见name:alex
    return ret
在响应头中添加cookie
ret.set_cookie('logined', 'yes')

总结:
    外键正向查:找书的出版社.
    方法1.基于对象: 对象.关联字段.字段, book_obj.publisher.name
    方法2.基于双下: 关联字段__字段, publisher__name 

    外键反向查: 找出版社有哪些书
    方法1.基于对象:obj.小写表名_set, publisher_obj.book_set.all() --反向查用小写表名_set,等价于publisher_obj.books.all()
    方法2.基于双下:表名__字段, Publisher结果集.values_list("books__title")
            (ps:结果集才有values或value_list方法,单个对象没有这个方法)



用auth模块,先authenticate(username=username,password=password),认证后再login(request,user)才是登录,login之后才会生成session.auth模块登录后自动写session. 
如果不用auth模块,要在通过数据库查询后后自己写session: if user_obj: request.session['is_login':1]


rediret('/login/')的本质是给响应设置响应头,让他定位到另一个页面.

    获取不加盐的cookie
    request.COOKIES['key'] 
    获取加盐的cookie
    request.get_signed_cookie(key,default=RAISE_ERROR,salt='', max_age=None)  --参数:
    default: 默认值
    salt: 加密盐
    max_age: cookie在浏览器中的有效期 多少秒

为什么要用httpResponse对象设置cookie,因为cookie的本质是设置http响应头headers,所以要用http对象来设置.


res={xx:xx,xx:xx}
return JsonResponse(res) #JsonResponse自动给res反序列化再发送

ajax总结:
    ajax基于js和xml:使用js用异步的方式传输xml的格式.
    他的异步体现在,发了一个请求不用等结果,就发另一个请求.
    $.ajax中发送data{},在视图函数中有request.POST.get('key')来取;
    如果data的字典中,有键值对的value是非字符串,要stringfy序列化,在视图函数中json.loads反序列化取;
    视图函数中return JSONresponse和response的区别:JSONresponse会自动反序列化.如果用response需要HttpResponse(json.dumps(res));
    $.ajax({url:xxx,type:xxx,data:{k1:v1,k2:v2}}, data中有非基本数据类型,要先序列化
    success:function(){}, # success—回调函数,操作成功执行的函数
    error:function(){}) # error--回调函数,操作失败的函数,成功还是失败根据返回的状态码判断
    ajax发请求的时候不通过form,所以可以不用form表单
    怎么发ajax?jquery中: $.ajax(….)


使用form流程:
    写一个form类.,继承forms.Form,里面写字段,如name,pwd  字段对应html的name
    视图函数中创建form对象. form_obj = RegForm()空form表格 或 form对象= form类名(request.POST)  把POST提交的数据传到form表单中.
    is_valid校验通过后,cleaned_data取数据.
    模板中用{form_obj}渲染出form表单
        {{ form_obj.as_p }}   ——》自动生成多个p标签  包含label input框
        {{ form_obj.user }}   ——》 生成某个字段的input框
        {{ form_obj.errors }}     ——》表单的所有错误信息,放ul和li里面
        {{ form_obj.user.errors }}     ——》 某个字段的所有错误信息
        {{ form_obj.user.errors.0 }}   ——》 某个字段的错误信息的第一个,比如长度不够格式也不对,只显示第一个错误长度不够.

form表单的select下拉框的choices取值问题:下拉框取值的3种取法.
    1.取固定的choices. 
        widget = widgets.Select(choices=((1, 'alex'), (2, 'max'), (3, '云凤丁'))))  # 固定的choice
    2.从数据库中某个字段.
        widget=widgets.Select(choices=models.Campuses.objects.values_list('id', 'name'))  # 从数据库中取. 但是弊端是无法实时更新,要实时更新需要重写init
    3.用ModelChoiceFeild类型    
        用ModelChoiceFeild可以实时更新,但是下拉框只显示object不能显示中文,要显示中文需要重写__str__方法.如果表单中有2个以上的ModelChoiceFeild就没法处理.所以不推荐使用.
        
    style="background-color: #20e940;"

style="background-color: #1dd5b0;"

    
form常用字段:
    user =forms.CharField(label='用户名', min_length=6)
    pwd = forms.CharField(label='密码', min_length=3)
radioSelect :
    gender = forms.fields.ChoiceField(
        choices=((1, ""), (2, ""), (3, "保密")),
        label="性别",
        initial=3,
        widget=forms.widgets.RadioSelect()
        )
多选SelectMultiple:
    hobby = forms.fields.MultipleChoiceField
        (
        choices=((1, "篮球"), (2, "足球"), (3, "双色球"), ),
        label="爱好",
        initial=[1, 3],
        widget=forms.widgets.SelectMultiple())

单选checkbox
    keep = forms.fields.ChoiceField(
        label="是否记住密码",
        initial="checked",
        widget=forms.widgets.CheckboxInput()
    
多选checkbox
    hobby = forms.fields.MultipleChoiceField(
        choices=((1, "篮球"), (2, "足球"), (3, "双色球"),),
        label="爱好",
        initial=[1, 3],
        widget=forms.widgets.CheckboxSelectMultiple()
        )
    
    7FF09E
如果前端is_valid校验不通过,会生成错误form_obj.errors


form表单校验的4种方法
    1.字段默认的校验
    2.在validators中加正则
    3.在validators中加校验的函数名
    4.钩子函数 

重写错误信息:
username = forms.CharField(
    label='用户名',
    min_length=6,
    error_messages={
        "required": "不能为空",
        "invalid": "格式错误",
        "min_length": "用户名最短8位"
    })


    
form小结;
    form能做什么
    form的定义和使用流程
    有哪些字段
    choices的取值3种取值方式
    字段有哪些常用参数
        参数
        label        中文的提示 
        initial      初始值
        min_length   最小长度
        max_length   最大长度
        required     是否是必填的  
        disabled     是否不可修改
        error_messages = {
        'min_length' : '太短了''max_length' : '够长了'
        'required':   '不能为空'
        }
        validators = [ 校验器1,校验器2 ]

    form在视图中的使用
    form在模板中的渲染
    form校验的4种方法
    


request对象:存储这次请求所有请求信息:# django将请求报文中的请求行、首部信息、内容主体封装成 HttpRequest类中的属性

post:键值对的值是多个的时候,比如checkbox类型的input标签,select标签,需要用:request.POST.getlist("hobby")来获取

HttpRequest.META  请求头,一个标准的Python 字典,包含所有的HTTP 首部。具体的头部信息取决于客户端和服务器

 reqeust属性之HttpRequest.FILES
                        一个类似于字典的对象,包含所有的上传文件信息。如果上传的是文件,用request.FILES获取内容.
                        FILES 中key为<input type="file" name="" /> 中的name,值则为对应发送的内容
                      FILES 只有在请求的方法为POST且提交的<form> 带有enctype="multipart/form-data" 的情况下才会包含数据。否则,FILE是空
                    
request属性之HttpRequest.user(用户认证组件下使用)  #user 只有当Django 启用 AuthenticationMiddleware 中间件时才可用。
                        一个 AUTH_USER_MODEL 类型的对象,表示当前登录的用户。
                      如果用户当前没有登录,user 将设置为 django.contrib.auth.models.AnonymousUser 的一个对象。你可以通过 is_authenticated() 来判断                    


redircet重定向的状态码有301和302, 区别:
                        301:表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容覆盖旧地址.

                        302:表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址
    
    

猜你喜欢

转载自www.cnblogs.com/yunfengding/p/10533261.html
11S
11
今日推荐