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'
)

posted @ 2019-04-12 09:52  SwZ1886  阅读(87)  评论(0编辑  收藏  举报