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')
最后我们打个断点测试,故意输入不符合要求的手机号
每天进步一点,加油!