Django总结
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中是二进制需要编码,需要先decode('utf-8')然后在json.loads()这个数据 请求体数据格式推导 请求首行作用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()#用的是模块的单例模式