django组件
路由分发
from django.conf.urls url('api/',include('app.urls')) #分发到app
反向解析url
url('index/', home, name='index')
#模板中 {% url 'index' 参数 %}
#视图中 from django.urls reverse('index') , args = (, ))
自定义模板过滤器/标签
from django import template register = template.Library() @register.filter() def cut(value, arg): return value.replace(arg, "") @register.simple_tag() #标签 @register.inclusion_tag('result.html') #html文件标签
cookie/session
cookie
request.COOKIES.get(k) #获取cookie HttpRequest.set_cookie(k,v) #设置cookie HttpRequest.delete_cookie(k) #删除cookie
session
request.session.get(k) request.session[k] = v request.session.setdefault(k,v) #存在则不设置 del request.session[k]
中间件
自定义中间件
from django.utils.deprecation class M(MiddlewareMixin): def process_request(self, request): #接收请求时执行 def process_response(self, request, response): #收到响应式执行 def process_view(self, request, view_func, view_args, view_kwargs): #调用指定视图前执行 view_func:Django #即将使用的视图函数。 (它是实际的函数对象,而不是函数的名称作为字符串。) view_args: #将传递给视图的位置参数的列表. view_kwargs: #将传递给视图的关键字参数的字典。 view_args和view_kwargs都不包含第一个视图参数(request)。 def process_exception(self, request, exception): #视图函数出现异常时执行 def process_template_response(self, request, response): #视图函数执行之后并返回render对象时执行
forms组件
编写forms类
from django import forms class RForm(forms.Form):
username = forms.CharField(
max_length=24,
label='用户名 :',
error_messages={
'max_length': '用户名最长24位',
'required': '请填写用户名'
},
widget=forms.widgets.TextInput(
attrs={'class': 'form-control',
'placeholder': 'Username',
'id': 'username'
}
)
)
RForm(request.POST).is_valid() #校验字段
常用字段:
min_length,
label
initial 初始值
error_messages = {} 错误提示
widget = forms.widgets.PasswordInput(attrs={'class': 'c1'})
钩子函数:
def clean_字段名(self): #局部钩子 username = self.cleaned_data.get('username') name = models.User.objects.filter(username=username) if name: raise ValidationError('用户名已存在') else: return username def clean(self): #全局钩子 password = self.cleaned_data.get('password') re_password = self.cleaned_data.get('re_password') if re_password and password != re_password: self.add_error('re_password',ValidationError('密码不一致')) else: return self.cleaned_data
auth模块
from django.contrib import auth user_obj = authenticate(username=username, password=password) #校验用户名密码 if user_obj: login(request, user_obj) #给request对象中加入uesr对象 logout(request) #退出登录状态 is_authenticated() #判断是否为登录状态 login_requierd() #装饰器:未登录跳转到登录页面 from django.contrib.auth.models import User user = User.objects.create_user(username='用户名',password='密码',email='邮箱',...)
自定义user表
from django.contrib.auth.models import AbstractUser class UserInfo(AbstractUser): """ 用户信息表 """ nid = models.AutoField(primary_key=True) phone = models.CharField(max_length=11, null=True, unique=True) def __str__(self): return self.username
缓存cache
-setiing配置
CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache', # 指定缓存使用的引擎 'LOCATION': r'D:\lqz\vue', # 指定缓存的路径 'TIMEOUT': 300, # 缓存超时时间(默认为300秒,None表示永不过期) 'OPTIONS': { 'MAX_ENTRIES': 300, # 最大缓存记录的数量(默认300) 'CULL_FREQUENCY': 3, # 缓存到达最大个数之后,剔除缓存个数的比例,即:1/CULL_FREQUENCY(默认3) } } }
缓存页面
-全站使用
中间件列表开头添加 'django.middleware.cache.UpdateCacheMiddleware',
结尾添加 'django.middleware.cache.FetchFromCacheMiddleware'
-单页面
from django.views.decorators.cache import cache_page
@cache_page(20) 20秒超时
-局部html中使用
{% load cache %}
{% cache 10 'key' %}
内容
{% endcache %}
跨域
中间件中编写:
from django.utils.deprecation import MiddlewareMixin class CorsMiddleware(MiddlewareMixin): def process_response(self, request, response): # 给响应头加上 Access-Control-Allow-Origin 字段 并简单的设置为 * response['Access-Control-Allow-Origin'] = '*' if request.method == 'OPTIONS': # 允许发送 PUT 请求 response['Access-Control-Allow-Methods'] = 'PUT, DELETE' # 允许在请求头中携带 Content-type字段,从而支持发送json数据 response['Access-Control-Allow-Headers'] = 'Content-type' return response
['Access-Control-Allow-Origin'] 允许域
['Access-Control-Allow-Methods'] 允许请求方式
['Access-Control-Allow-Headers'] 允许数据类型
django-cors-headers模块
'corsheaders', # 将 corsheaders 这个APP注册 'corsheaders.middleware.CorsMiddleware', # 添加中间件
配置
你可以选择不限制跨域访问
CORS_ORIGIN_ALLOW_ALL = True
或者你可以选择设置允许访问的白名单
CORS_ORIGIN_ALLOW_ALL = False 选择限制跨域访问
CORS_ORIGIN_WHITELIST = (
# '<YOUR_DOMAIN>[:PORT]',
'127.0.0.1:8080'
)