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')

最后我们打个断点测试,故意输入不符合要求的手机号

 

 

posted @ 2018-03-01 10:04  sellsa  阅读(313)  评论(0编辑  收藏  举报