zoukankan      html  css  js  c++  java
  • Title

    一、MVC,MTV架构

      models(数据库,模型) views(html模板) controllers(业务逻辑处理) --> MVC

      models(数据库,模型) templates(html模板) views(业务逻辑处理) --> MTV

      Django -> MTV

    二、中间件

    在settings配置文件中
        MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
        ]
    在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。
    在django项目的settings模块中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件
    
    自定制两个中间件类,创建md.py
        from django.utils.deprecation import MiddlewareMixin
    
        class M1(MiddlewareMixin):
            def process_request(self,request):
                print('m1.proccess_request')
    
            def process_view(self, request, callback, callback_args, callback_kwargs):
                print('m1.process_view')
                response = callback(request,*callback_args,**callback_kwargs)
                return response
                
            def process_exception(self, request, exception):
                pass
    
            def process_response(self,request,response):
                print('m1.process_response')
                return response
    
        class M2(MiddlewareMixin):
            def process_request(self,request):
                print('m2.process_request')
    
            def process_view(self, request, callback, callback_args, callback_kwargs):
                print('m2.process_view')
                
            def process_exception(self, request, exception):
                pass
    
            def process_response(self,request,response):
                print('m2.process_response')
                return response
                
    去settings里添加一下
        MIDDLEWARE = [
        'django.middleware.security.SecurityMiddleware',
        'django.contrib.sessions.middleware.SessionMiddleware',
        'django.middleware.common.CommonMiddleware',
        'django.middleware.csrf.CsrfViewMiddleware',
        'django.contrib.auth.middleware.AuthenticationMiddleware',
        'django.contrib.messages.middleware.MessageMiddleware',
        'django.middleware.clickjacking.XFrameOptionsMiddleware',
        'md.M1',
        'md.M2',
        ]
        
    运行结果:
    m1.proccess_request
    m2.process_request
    m1.process_view
    test
    m2.process_response
    m1.process_response
    
    当用户请求进来的时候,会先从MIDDLEWARE里从上往下走完proccess_request,接着再返回顶部再重新往下走process_view,遇到了process_view,就会直接跳到视图函数里执行视图函数,不再执行其他的process_view。
    从视图函数返回的时候会从M2向上先执行每一个process_exception,然后再返回来M2再向上执行每一个process_response,如果process_exception有返回值Httpresponse被处理了,则不再执行其他process_exception,而是直接从M2的process_response向上执行。
    
    process_request
    
    process_response(...response)
        必须有返回值
        return response
        
    process_view
    process_exception
    process_template_view
    
    应用:对所有请求或一部分请求做批量处理
    View Code

    三、初识Form组件

    views.py中
        class LoginForm(Form):
            username = fields.CharField(max_length=8,min_length=4,required=True,
                                        error_messages={
                                            'max_length':'用户名太长',
                                            'min_length':'用户名太短',
                                            'required':'用户名不能为空'
                                        })
            passwd = fields.CharField(max_length=12,required=True,
                                      error_messages={
                                            'max_length':'密码太长',
                                            'required':'密码不能为空'
                                        })
    
        def login(request):
            if request.method == 'GET':
                return render(request,'login.html')
            else:
                obj = LoginForm(request.POST)
                if obj.is_valid():  # 如果验证成功
                    print(obj.cleaned_data) # 字典类型
                    return HttpResponse('successful done')
                else:
                    print(obj.errors)  # 字典类型
                    return render(request, 'login.html',{'obj':obj})
    
    login.html模板中
        <form action="login.html" method="POST">
            {% csrf_token %}
            <p><input type="text" name="username" placeholder="用户名"> {{ obj.errors.username.0 }}</p>
            <p><input type="password" name="passwd" placeholder="密码"> {{ obj.errors.passwd.0 }}</p>
            <input type="submit" value="提交">
        </form>
    
    要点:Form组件类中的字段名称要和相应的html模板文件的name属性值对应才可以检测成功 # html标签name属性 = Form类字段名
    # 正确信息
    obj.cleaned_data
    # 所有错误信息
    obj.errors
    View Code
  • 相关阅读:
    Ubuntu 查看网关地址方法
    cf451C-Predict Outcome of the Game
    C语言运算符优先级
    文件的概念以及VC里的一些文件操作API简介
    关于空指针NULL、野指针、通用指针
    由字符串常量引发的思考
    数字三角形问题
    cdoj第13th校赛初赛F
    cdoj第13th校赛初赛H
    cdoj第13th校赛初赛L
  • 原文地址:https://www.cnblogs.com/guotianbao/p/7536424.html
Copyright © 2011-2022 走看看