用ajax提交使用者的註冊資訊(使用者名稱,密碼,確認密碼,年齡),提交的資料格式為json。用form元件做認證和資料校驗,姓名要大於4位,小於16位,並且不能以sb開頭和結尾,使用者名稱如果存在,返回使用者存在;密碼(最大16位,最小8位);年齡,大於18歲,小於100歲,密碼和確認密碼一致,校驗不通過返回錯誤資訊,校驗通過,存到user表中。
# 前端**
# views**
class validator(forms.form):
username = forms.charfield(max_length=16, min_length=4, label='使用者名稱',
error_messages=,
# widget=widgets.textinput(attrs=)
)age = forms.integerfield(label='年齡',
error_messages=,
# widget=widgets.textinput(attrs=)
)password = forms.charfield(max_length=16, min_length=8, label='密碼',
error_messages=,
# widget=widgets.passwordinput(attrs=)
)confirm_pwd = forms.charfield(max_length=16, min_length=8, label='確認密碼',
error_messages=,
# widget=widgets.passwordinput(attrs=)
)gender = forms.fields.choicefield(
choices=((1, "男"), (2, "女"), (3, "保密")),
label="性別",
initial=3,
widget=forms.widgets.radioselect()
)# 區域性鉤子
def clean_username(self):
username = self.cleaned_data.get('username')
if 'sb' in username:
self.add_error('username', '含有sb是不可以的')
user_obj = models.userinfo.objects.filter(username=username).first()
if user_obj:
self.add_error('username', '這個使用者已經存在')
return username
# 全域性鉤子
def clean(self):
password = self.cleaned_data.get('password')
confirm_password = self.cleaned_data.get('confirm_pwd')
if not password == confirm_password:
self.add_error('confirm_pwd', '2次密碼輸入不一致!')
age = self.cleaned_data.get('age')
if not age in range(18,100):
self.add_error('age', '年齡在18歲到100歲之間')
# 資訊認證儲存
def validator(request):
back_dic =
myforms_obj = validator()
if request.method == 'post':
data = json.loads(request.body)
myforms_obj = validator(data)
if myforms_obj.is_valid():
data = myforms_obj.cleaned_data
data.pop('confirm_pwd')
back_dic['code'] = 1000
back_dic['url'] = ''
models.userinfo.objects.create(**data)
else:
back_dic['code'] = 2000
back_dic['msg'] = myforms_obj.errors
return jsonresponse(back_dic)
return render(request, 'validator.html', locals())
# models模組
class userinfo(models.model):
username = models.charfield(max_length=16,verbose_name='使用者名稱')
password = models.charfield(max_length=16,verbose_name='密碼')
age = models.integerfield(default=18)
gender_choice = ((1,'男'),(2,'女'),(3,'保密'))
gender = models.integerfield(verbose_name='性別',choices=gender_choice,default=1)
# forms元件的使用流程
匯入forms模組和widgets模組:from django import forms from django.forms import widgets
利用form.需要生成的欄位名 生成欄位forms欄位
前端渲染,需要在後端views當中生成乙個forms空物件,用於渲染出頁面,這裡提前可以定義好錯誤資訊怎麼渲染,注意錯誤資訊的提示是errors.0,因為返回的錯誤資訊是乙個列表
對於預設的校驗規則不滿足使用要求,可以使用全域性鉤子(clean)和區域性鉤子(clean_校驗欄位名)去自定義校驗規則,將錯誤資訊新增到錯誤的容器當中。
# 對於需要注意的點:
2.如果有檔案物件,可以借助formdata物件進行傳遞;
3.csrf_token的值可以放在頭當中;
4.傳遞到後端的資料需要用json模組反序列化得到字典資料進行校驗;
5.對於鉤子函式,區域性鉤子函式是將勾出來的資料進行返回;全域性鉤子函式是返回self.cleaned_data
對於forms元件的常用字段請檢視博文:個人總結,總結不到位的地方請多多指教
Django的forms元件使用
models.py class userinfo models.model name models.charfield max length 32 pwd models.charfield max length 32 email models.emailfield 模板檔案 lang en char...
django元件的forms元件
一.校驗字段功能 models.py class userinfo models.model name models.charfield max length 32 pwd models.charfield max length 32 email models.emailfield tel mode...
結合Git的Django基本使用
1.進入git bash,使用命令django admin version,檢視django是否已經安裝,若沒有安裝,則需要使用pip install django 版本號 安裝。2.使用django admin startproject 來新建乙個django專案。1.在git bash中cd到建...