Django生命周期

Django session机制

1.django请求生命周期
    http协议:
        四大特性:
            1.基于scoket应用于应用层的协议
            2.基于请求响应的协议
            3.无连接
            4.无状态
    WSGI协议:wsgiref,uwsgi,werkzeug实现模块
    中间件:默认七个中间件,五个可自定义方法,全局访问频率限制,权限限制等
        process_request  请求刚进来时
        process_view    经过url执行视图函数之前
        process_template_response   视图函数中return render时触发
        process_exception       视图函数中报错执行
        process_response    返回相应响应时
        
    urls.py:路由控制器
    MTV:
        views.py:
            视图层:FBV,CBV
                CBV可张开讲:from django.views import View
                看一下源码
                
            返回结果必须是HttpResponse对象
            
        templates.py:
            模板语法:变量相关{{}},逻辑相关{%%}
            
        models.py:
            ORM操作
            
            
2.django session机制
    request.session仅仅只是产生缓存,真正起作用还是中间件

    1.生成随机字符串

    2.把字符串所对应的信息存储到数据库中

    3.给前端返回对应的信息

3.form组件 auth认证 
    1.登陆auth.login(request, user_obj)
    2.判断是否是登陆状态request.user.is_authenticated()
    3.修改密码——检查原来的密码user.check_password(old_password)
                         设置新的密码user.set_password(confirm_password)
                         保存user.save()
    4.注销auth.logout(request)
4.django settings文件配置
STATICFILES_DIRS = [
    os.path.join(BASE_DIR, "static"),  # 静态文件存放位置
]
AUTH_USER_MODEL = "app01.UserInfo"#指定你所继承的类(用户表)

# 指定用户上传的静态文件存储位置 例如avatar文件,会在media文件夹下自动创建avatar文件然后将文件存入avatar中
# MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
在url.py中写下面的固定写法
url(r'^media/(?P<path>.*)', serve, {'document_root': settings.MEDIA_ROOT}),  # 固定写法 对外界开放服务器内部资源
LOGIN_URL = '/login/'#装饰器(当你没有登陆时重定向到此路由)
5.前后端传输数据编码格式
    简单前后端传输页面代码搭建
    http传输数据格式书写
    三种常见编码格式总结
        urlencoded ——username=jason&password=123
        form-data
        json--{"name":"jason","password":123}后台的信息在body中是二进制需要编码
    请求体数据格式推导
    请求首行作用ContentType参数作用
    浏览器查看form表单默认提交方式以及组织数据格式
    ajax提交数据(默认提交,json提交>>>前后端分离)
        request.POST无法解析>>>request.body存储原始数据

admin源码

from django.utils.module_loading 
import autodiscover_modules
def autodiscover():
        autodiscover_modules('admin', register_to=site)
#django启动的时候就会自动执行每一个应用下的admin.py文件

admin site源码
    class AdminSite(object):
        def __init__(self, name='admin'):
            self._registry = {}  # model_class class -> admin_class instance
        
        def register(self, model, admin_class=None, **options):
            if not admin_class:
                admin_class = ModelAdmin  # 所有模型表公共的配置

            # (******)  {'模型表变量名':'模型表配置类对象'}
            self._registry[model] = admin_class(model)  
            
    site = AdminSite()

猜你喜欢

转载自www.cnblogs.com/ShenJunHui6/p/10822121.html
今日推荐