15、Django实战第15天:我要学习咨询
2024-08-24 18:35:46
今天完成的是课程机构列表页面的最后一个模块:我要学习
我们在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')
最后我们打个断点测试,故意输入不符合要求的手机号
最新文章
- 2.WindowsServer2012R2装完的一些友好化设置
- 【重要更新】Senparc.Weixin SDK v4.3.3升级说明
- selenium WebDriver 操作高德地图
- iOS计算字符串的宽度高度
- Maven根据不同个环境打包, 获取不同的配置文件等等
- AngularJS+ckEditor管理ng-model
- bat完美关机命令
- PL/SQL 如何导出INSERT语句
- Next SIEM
- Django的路由层
- 使用C# HttpWebRequest进行多线程网页提交。Async httpclient/HttpWebRequest实现批量任务的发布及异步提交和超时取消
- JavaEE 之 DBCP
- visual studio 2017 installer 安装包制作过程出现的问题---此安装程序需要.NET Framework 版本 3.5,请安装该版本,然后重新运行此安装程序,可以从Web获得.NET Framework 。要立即做此事吗?
- SYSAUX表空间如何清理
- :工厂模式1:方法模式--Pizza
- 运维利器万能的 strace
- mysql忘记密码解决方法
- vfork 挂掉的一个问题
- Redis计算地理位置距离-GeoHash
- Python 中一个逗号引发的悲剧
热门文章
- C++——内存使用
- bzoj 1977 洛谷P4180 严格次小生成树
- 这次OpenSSL HeartBleed漏洞是怎么一回事呢?
- 从零开始学习MXnet(三)之Model和Module
- Codeforces Round #348 (VK Cup 2016 Round 2, Div. 2 Edition) B
- POJ3259:Wormholes(spfa判负环)
- import as from import 区别
- bzoj 5028: 小Z的加油店——带修改的区间gcd
- JGroups 初探
- 【洛谷 P2485】 [SDOI2011]计算器 (BSGS)