15、Django实战第15天:我要学习咨询
今天完成的是课程机构列表页面的最后一个模块:我要学习

我们在models中创建对应的表时UserAsk。之前我们讲过:在做表单的时候,我们可以通过forms先对提交的数据做验证,之前我们使用的是Form,当一张表里面的字段比较多,我们可以采用Model.Form
在organizations下面新建forms.py
class UserAskForm(forms.ModelForm):
class Meta:
model = UserAsk
#我们可以指定model里那些字段,比如说add_time我们就不需要
fields = ['name', 'mobile', 'course_name']
后台逻辑:编辑organization.views.py
...
from django.http import HttpResponse
from .forms import UserAskForm
class AddUserAskView(View):
def post(self, request):
userask_form = UserAskForm(request.POST)
if userask_form.is_valid():
userask_form.save(commit=True)
return HttpResponse('{"status":"success"}', content_type='application/json')
else:
return HttpResponse('{"status":"fail", "msg":"添加出错"}', content_type='application/json')
配置一条url,编辑urls.py
...
from organization.views import AddUserAskView
urlpatterns = [
...
url(r'^add_ask/$', AddUserAskView.as_view(), name='add_ask'),
]
前端部分:编辑org-list.html,把base.html底部的js剪切放入到{% block custom_js%}中
然后对这个js进行修改

表单那边添加{% csrf_token %}

现在访问这个页面测试功能是OK,但是还存在一个问题,就是我们输入任意的手机号码,也可以提交成功,一般我们都会对手机用正则做匹配,编辑organization.forms.py
from django import forms
from operation.models import UserAsk
import re
class UserAskForm(forms.ModelForm):
class Meta:
model = UserAsk
#我们可以指定model里那些字段,比如说add_time我们就不需要
fields = ['name', 'mobile', 'course_name']
def clean_mobile(self):
mobile = self.cleaned_data['mobile']
REGEX_MOBILE = "^1[358]\d{9}$|^147\d{8}$|^176\d{8}$"
p = re.compile(REGEX_MOBILE)
if p.match(mobile):
return mobile
else:
raise forms.ValidationError('手机号非法', code='mobile_invalid')
最后我们打个断点测试,故意输入不符合要求的手机号

每天进步一点,加油!
浙公网安备 33010602011771号