#自定义filter(过滤器)
user下新建目录:templatetags,下新建:tmpTags.py
from django import template
register = template.Library
@register.filter
def status_filter(x):
return '自定义filter'
html.index中引入:{% load tmpTags %}
使用过滤器:{{ navs|status_filter }} == 把navs当作参数传给status_filter处理 (最多接收两个参数)
接收多个参数用simple_tag
@register.simple_tag()
def test_simple_tag(x,y,z):
return x+y+z
前端使用方式:{% test_simple_tag a b c %} == 把a,b,c当成参数传给test_simple_tag处理
# Form操作对前端html向后台提交的数据进行验证
1-创建forms.py文件
2-forms中校验规则
from django import forms from django.core.exceptions import ValidationError # 验证有问题,抛异常用的
# validators引入的验证方式 def test_phone(value): print("test_phone", 3) if len(value) != 11: raise ValidationError('手机格式不正确') else: return value class ArticleFrom(forms.Form): phone = forms.CharField(required=True, # 是否必填 validators=[test_phone], # 公共验证器---优先级最高01 error_messages={ # 错误信息提示 'required': '必填参数未填', }) title = forms.CharField(required=True, # 是否必填 max_length=10, # 最大长度5 min_length=5, # 最小长度 strip=False, # 是否去掉用户输入的空格 默认是True error_messages={ # 错误信息提示 'required': '必填参数未填', 'max_length': '最大10个字符', 'min_length': '最小5个字符' })
#针对个别字段进行验证,优先级--02
def clean_phone(self):
print(2)
return self.cleaned_data.get('phone')
#form中的钩子函数,全部数据验证、优先级--03
def clean(self):
print(1)
return self.cleaned_data
3- views中引入校验规则
from user.forms import ArticleFrom
def article(request): if request.method == 'GET': return render(request, 'post.html') else: # 实例化form验证器,接收post传过来的数据 articleObj = ArticleFrom(request.POST) # 判断当前 写好的验证器是否验证通过 返回 True 或 false f = articleObj.is_valid() if f: # 验证通过的字段会都在cleaned_data中,是个dict print("articleObj.cleaned_data",articleObj.cleaned_data) else:# 验证不通过,拿到错误信息 print("articleObj.errors",articleObj.errors) # 通过 dict方式取 信息 print("articleObj.errors",articleObj.errors.get_json_data()) #错误信息:msg msg = articleObj.errors.get_json_data().get('title')[0].get('message')
4-ModelForm使用, Form 和 Model结合,能够省略Form定义字段。共用Model,同时也可以保留form功能
class StudentForm(forms.ModelForm): name = forms.CharField(validators=[test_name]) class Meta: #创建类变量和Model建立映射关系 model = models.Student fields = '__all__' #验证全部字段 fields = {'name'} #验证单个字段 exclude = {'name'} #排除验证某个字段
# clean的原则和forms.Form相同 def clean(self): return self.cleaned_data #单个字段验证 必须保证form中有这个字段 def clean_name(self): return self.cleaned_data.get('name')
#views中和form逻辑一致
def student(request):
if request.method == 'GET':
return render(request, 'student.html')
else:
studentObj = StudentForm(request.POST)
f = studentObj.is_valid()
if f:
print(studentObj.cleaned_data)
else:
print(studentObj.errors)
return HttpResponse('ok')
models中:
class Student(models.Model):
name = models.CharField(verbose_name='学生名字', max_length=50)
age = models.IntegerField(verbose_name='年龄')
class Meta:
db_table = 'student'