django models 設置默認的查詢排序方式:
class Meta:
ordering = ("-create_time")
form 繼承models
方法一
from django import forms
from apps.user import UserModel
class User(forms.Form):
class Meta:
models = UserModel
方法二
# -*- coding: utf-8 -*-
import re
from django import forms
from django.core.exceptions import ValidationError
def mobile_validate(value):
mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$')
if not mobile_re.match(value):
raise ValidationError('手機號碼格式錯誤')
def username_validate(value):
mobile_re = re.compile(r'^[0-9A-Za-z.@\-\_]{2,16}$')
if not mobile_re.match(value):
raise ValidationError('用戶名格式錯誤(不能是中文)')
class UserForm(forms.Form):
"""user 表單"""
userName = forms.CharField(required=True, min_length=2, max_length=60, validators=[username_validate,])
depart_id = forms.CharField(required=False)
depart_name = forms.CharField(required=False)
role = forms.CharField(required=False)
userPwd = forms.CharField(max_length=20, min_length=6,
error_messages={'required':'密碼不能爲空','min_length':'密碼長度不小於6',"max_length":'密碼長度不能大於12'})
userEmail = forms.EmailField( required=True, error_messages={'required': '郵箱不能爲空.','invalid':"郵箱格式錯誤"})
Name = forms.CharField( required=False)
phone = forms.CharField(required=False, validators=[mobile_validate, ])
area_level = forms.CharField(validators=[
RegexValidator(r'^[123]$', '請檢查級別'),
]
)
area_status = forms.CharField(validators=[
RegexValidator(r'^[01]$', '請檢查狀態'),
])
area_order = forms.CharField(validators=[
RegexValidator(r'^[0-9]{1,2}$', '請輸入2位數字'),
])
views 裝飾器的使用
自定義的兩個裝飾器
def pre_fun(func):
def inner(request, *args, **kwargs):
print(request.path)
kwargs = {
"name": "你好",
"kw": "asd"
}
return func(request, *args, **kwargs)
return inner
def my_decorator(func):
def wrapper(request, *args, **kwargs):
print('自定義裝飾器被調用了')
print('請求路徑%s' % request.path)
return func(request, *args, **kwargs)
return wrapper
方法一
@pre_fun
def index(request, *args, **kwargs):
print(kwargs)
return render(request, 'index.html', {'kw': kwargs})
方法二
@method_decorator(pre_fun, name="get")
class Index2View(View):
def get(self, request, *args, **kwargs):
return render(request, 'index.html', {'kw': kwargs})
方法三
class Index2View(View):
@method_decorator(pre_fun)
def get(self, request, *args, **kwargs):
return render(request, 'index.html', {'kw': kwargs})
方法四
urlpatterns = [
path('index', my_decorator(IndexView.as_view()), name='index'),
path('', index, name='index1'),
path('index2', Index2View.as_view(), name='index2'),
]
django模板全局變量的使用
第一步:寫好全局變量的函數方法:
def global_lang(request):
“”“
這裏可以做一些用戶權限的權限的處理
request.user
request.path
request.session['key']
”“”
return {
'header_json':header_json
}
第二步:在settings 中進行配置
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates'), ],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
'XXX.XXX.global_lang'
],
},
},
]
第三步:在HTML中使用全局變量
{% include 'header.html' with header=header_json%}
或者
{{header_json}}