今天完成的是课程机构列表页面的最后一个模块:我要学习

我们在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')

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

 

最新文章

  1. 2.WindowsServer2012R2装完的一些友好化设置
  2. 【重要更新】Senparc.Weixin SDK v4.3.3升级说明
  3. selenium WebDriver 操作高德地图
  4. iOS计算字符串的宽度高度
  5. Maven根据不同个环境打包, 获取不同的配置文件等等
  6. AngularJS+ckEditor管理ng-model
  7. bat完美关机命令
  8. PL/SQL 如何导出INSERT语句
  9. Next SIEM
  10. Django的路由层
  11. 使用C# HttpWebRequest进行多线程网页提交。Async httpclient/HttpWebRequest实现批量任务的发布及异步提交和超时取消
  12. JavaEE 之 DBCP
  13. visual studio 2017 installer 安装包制作过程出现的问题---此安装程序需要.NET Framework 版本 3.5,请安装该版本,然后重新运行此安装程序,可以从Web获得.NET Framework 。要立即做此事吗?
  14. SYSAUX表空间如何清理
  15. :工厂模式1:方法模式--Pizza
  16. 运维利器万能的 strace
  17. mysql忘记密码解决方法
  18. vfork 挂掉的一个问题
  19. Redis计算地理位置距离-GeoHash
  20. Python 中一个逗号引发的悲剧

热门文章

  1. C++——内存使用
  2. bzoj 1977 洛谷P4180 严格次小生成树
  3. 这次OpenSSL HeartBleed漏洞是怎么一回事呢?
  4. 从零开始学习MXnet(三)之Model和Module
  5. Codeforces Round #348 (VK Cup 2016 Round 2, Div. 2 Edition) B
  6. POJ3259:Wormholes(spfa判负环)
  7. import as from import 区别
  8. bzoj 5028: 小Z的加油店——带修改的区间gcd
  9. JGroups 初探
  10. 【洛谷 P2485】 [SDOI2011]计算器 (BSGS)