python web django 2nd level -- 待更新

练习代码位置

实例代码位置 --> app: myblog

Form

利用Form表单验证,自己写的html
    思路:
        新建一个类 LoginForm(forms.Form)
        新建对象 obj = LoginForm(request.Post)
        常用方法:
            obj.is_valid()
            obj.clean()
            obj.errors.as_json()
            
    验证字段类型:  --- 和models的成员基本一致
        CharField()
        IntegerField()
        EmailField()
        
        字段参数:
            required
            max_length min_length
            自定义验证器:
                validators=[func]   # 自定义验证类型,如果不合法,直接raise就好  注意传过去的数据类型
                
            个性化提示:
            error_messages={"required":"不能为空","invalid":"不合法哦"}
            
            个性化外观
            mychoices = ((1,"female"),(1, "male"),)
            widget=forms.Select(choices=mychoices, attrs={"k1":"v1"})
        
        
        
自动生成html
        思路:
            1、 和上面一样
            2、 把loginForm_obj 传给前端,前端自己拿数据 
                {% obj.username %}
                {%obj.password %}
                {%obj.errors.username.0 %}
                {%obj.errors.password.0 %}

ModelForm

CSRF

    网站不允许直接post数据,需要先get一次数据,返回的时候网站返回一个token给页面,页面下次访问的时候会带着token过来

form 方式

    外兜
    这种比较简单,直接提交表单就行了
    因为表单里面直接有一个hidden的input widget

ajax 方式

    内兜
    需要自己去获取cookie,然后提交给网站
        注意要导入jquery  and  js.cookie.js
        
        <script src="/static/plugin/jquery/jquery-1.8.0.js"></script>
        <script src="/static/plugin/jquery/jquery.cookie.js"></script>
    
        var csrftoken = $.cookie('csrftoken');
  
        function csrfSafeMethod(method) {
            // these HTTP methods do not require CSRF protection
            return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
        }
        
        //每次ajax请求之前都会执行这个函数
        $.ajaxSetup({
            beforeSend: function(xhr, settings) {
                if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
                    xhr.setRequestHeader("X-CSRFToken", csrftoken);
                }
            }
        });

cookie and session

概述

cookie  存在前端浏览器里面的一个字符串
        默认不能跨域名访问
session 存在后端服务器上的一个状态信息 e.g. 登录状态
设置:
    obj = render(reqeust, "/static/myblog/cookie.html")
    obj.set_ookie("k1","v1")  # 把cookie写入html中
    obj.set_cookie(key,value, max_age, path="/")
        max_age: 过期时间, 单位秒
        path:  该cookie只在path下面能使用,默认是 / ,对该域名全局生效
    
获取:
    cookie_cli = request.COOKIES  # 获取到的是一个字典

session

概述:
    session 依赖于cookie实现功能,会把session_id 利用cookie的渠道写入浏览器,敏感信息放到服务上
    session_id 对开发者隐藏,不用管, session_id 唯一标识一个浏览器
    django 默认支持session,默认存储到数据库中 table: django_session 过期时间  两周
    
使用:
    当成一个字典使用
    request.session["user"] = "yangli"
    def request.session["user"]
    request.session.delete(request.session.session_key)
    
session 存放位置配置 settings.py 配置文件即可
    db
    cache
    file
    cached_db
    signed_cookies
  • level1
  • level2
    • level2-1
    • level2-2
  • level3
posted @ 2016-10-23 14:23  aomibaba  阅读(151)  评论(0编辑  收藏  举报