Django 在线教育平台开发(七)ModelForm
2018-12-04 21:34
573 查看
ModelForm创建表单
[code]#models class UserAsk(models.Model): name = models.CharField(max_length=20, verbose_name=u"姓名") mobile = models.CharField(max_length=11, verbose_name=u"手机") course_name = models.CharField(max_length=50, verbose_name=u"课程名") add_time = models.DateTimeField(default=datetime.now, verbose_name=u"添加时间") #forms class UserAskForm(forms.ModelForm): class Meta: model = UserAsk fields = ['name', 'mobile', 'course_name']
使用modelForm继承models建立Form,使得Form的创建变的十分简单,同时还可具有一些models才有的特性。
特性:
特性1
[code]#views #直接将表单以models的方式存入数据库 user_ask = userask_form.save(commit=True)
特性2
[code]#forms.py class UserAskForm(forms.ModelForm): ... #通过添加clean_的方法,可以自定义is_valid()方法,从而增强表单数据有效性的判断 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(u"手机号码非法", code="mobile_invalid")
mobile = self.cleaned_data['mobile'] 将数据转换成字典型,获取key='mobile'的数据。
Url分发
[code]#urls from django.conf.urls import url,include urlpatterns = [ #课程机构url配置 url(r'^org/', include('organization.urls', namespace="org")), ] #org.urls from django.conf.urls import url from .views import OrgView urlpatterns = [ url(r'^list/$', OrgView.as_view(), name="org_list"), ]
通过多级的url配置,使得urls.py的内容变的更加简洁,清楚。
注意:在include()中设置namespace,可以防止重名的冲突!
在template中,设置相对路径时需要使用{% url 'org: list' %}
实现Ajax异步请求
在页面上进行表单提交时,不希望改变整个页面,只在某些字段上进行调整。
[code]#views from django.http import HttpResponse class AddUserAskView(View): def post(self, request): userask_form = UserAskForm(request.POST) if userask_form.is_valid(): user_ask = userask_form.save(commit=True) return HttpResponse('{"status":"success"}', content_type='application/json') else: return HttpResponse('{"status":"fail", "msg":"添加出错"}', content_type='application/json')
这里与上面的代码是承接的,Ajax实现异步请求的方法是,在进行表单验证时,只发送小部分命令信息。处理是在客户端的JS中进行的。
[code]#templates <script> $(function(){ $('#jsStayBtn').on('click', function(){ $.ajax({ cache: false, type: "POST", url:"{% url "org:add_ask" %}", data:$('#jsStayForm').serialize(), async: true, success: function(data) { if(data.status == 'success'){ $('#jsStayForm')[0].reset(); alert("提交成功") }else if(data.status == 'fail'){ $('#jsCompanyTips').html(data.msg) } }, }); }); }) </script>
反向获取被外键表
[code]#views.py all_courses = course_org.course_set.all() #models class Course(models.Model): course_org = models.ForeignKey(CourseOrg, verbose_name=u"课程机构", null=True, blank=True)
调用方法为:'name'+_set ,及上图中的 '.course_set' 方法
阅读更多相关文章推荐
- Django 在线教育平台开发(十)xadmin进阶开发
- Django 在线教育平台开发(八)课程功能实现的零星知识点
- 第三百九十二节,Django+Xadmin打造上线标准的在线教育平台—sql注入攻击,xss攻击,csrf攻击
- 第三百七十三节,Django+Xadmin打造上线标准的在线教育平台—创建用户app,在models.py文件生成3张表,用户表、验证码表、轮播图表
- 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - ActiveXForm在线体验安全设置
- 第三百九十六节,Django+Xadmin打造上线标准的在线教育平台—其他插件使用说,自定义列表页上传插件
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(2)
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(12)——admin介绍
- 基于DotNet构件技术的企业级敏捷软件开发平台 - AgileEAS.NET - 发布ActiveXForm/SmartClient在线演示
- python3-开发进阶Django-form组件中model form组件
- 第三百九十节,Django+Xadmin打造上线标准的在线教育平台—Django+cropper插件头像裁剪上传
- Java SSM三端分离开发在线教育平台实战视频教程
- Django建教育平台(三)--创建各App及其model
- 第三百八十六节,Django+Xadmin打造上线标准的在线教育平台—HTML母版继承
- Django建教育平台(五)--各app的model注册
- 第三百八十五节,Django+Xadmin打造上线标准的在线教育平台—登录功能实现,回填数据以及错误提示html
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(5)
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(8)——User models.py的设计
- 基于IMOOC强力django+杀手级xadmin 打造上线标准的在线教育平台课程的学习(10)——Organization models.py的设计
- 第三百七十五节,Django+Xadmin打造上线标准的在线教育平台—创建课程机构app,在models.py文件生成3张表,城市表、课程机构表、讲师表