[python 学习笔记] 从头开始创建一个django项目23 - 通过modelform完成我要学习的提交

1. 建立AddAskForm表单,建立表单的方法有两种:

a. 按照注释中的一般方法进行定义

b. 使用modelForm进行定义:适用于已经存在相应的model,且大部分表单中的字段和model中相同的情况

import re

from django import forms
from apps.operation.models import UserAsk

# class AddAskForm(forms.Form):
#     # 定义这个表单类中有哪些字段需要验证, 和model中的定义相似
#     name = forms.CharField(required=True, min_length=2, max_length=20)
#     mobile = forms.CharField(required=True, min_length=11, max_length=11)
#     course_name = forms.CharField(required=True, min_length=2, max_length=20)
#     # 字段的名称必须和html中字段的name一致


class AddAskForm(forms.ModelForm):  # 继承 forms.ModelForm
    mobile = forms.CharField(required=True, min_length=11, max_length=11)
    # model 和form 在定义字段时的属性不同,比如model中没有min_length属性,就在此直接定义

    class Meta:
        model = UserAsk  # model中的类
        fields = ['name', 'mobile', 'course_name']  # 字段的名称必须和html中字段的name一致



    def clean_mobile(self):  # 使用正则表达式验证手机号码是否合法
        """
        验证手机号码是否合法
        :return:
        """
        mobile = self.cleaned_data['mobile']
        regex_mobile = '^1[358]\d{9}$|^147\d{9}|^176\d{9}&'
        p = re.compile(regex_mobile)
        if p.match(mobile):
            return mobile
        else:
            raise forms.ValidationError('手机号码非法', code='mobile_invalid')

2. 建立view

class AddAskView(View):
    """
    只需要定义post方法
    """
    def post(self, request, *args, **kwargs):
        userask_form = AddAskForm(request.POST)
        if userask_form.is_valid():
            userask_form.save(commit=True)  # 保存到数据库中, commit= True会立即执行
            return JsonResponse({
                "status": "success"
            }) 
            # return json格式是因为html中的数据为json格式,并且有status 和msg两个key值
        else:
            return JsonResponse({
                "status": "fail",
                "msg": '添加出错'
            })

 3. url, 访问的url应该为 127.0.0.1/org/list 或者 127.0.0.1/org/add_ask

在总的urls.py中定义一个大的url 

 url(r'^org/', include(('apps.organizations.urls', 'organizations'), namespace='org')),

 在organizations的urls.py中定义分支url

from django.conf.urls import url, include
from apps.organizations.views import OrgView, AddAskView

urlpatterns = [
    url(r'^list/$', OrgView.as_view(), name='list'),
    url(r'^add_ask/$', AddAskView.as_view(), name='add_ask'),
]

4. 修改html中的url

<script>
    $(function(){
        $(document).ready(function() {
            $('#jsStayBtn').on('click', function () {
                $.ajax({
                    cache: false,
                    type: "POST",
                    url: "{% url 'org:add_ask'%}",  <!--修改此处的url为参数形式-->
                    data: $('#jsStayForm').serialize(),
                    async: true,
                    success: function (data) {
                        if (data.status == 'success') {
                            $('#jsStayForm')[0].reset();
                            $('#jsCompanyTips').html("");
                            alert("提交成功")
                        } else if (data.status == 'fail') {
                            $('#jsCompanyTips').html(data.msg)
                        }
                    },
                });
            });
        });
    })

</script>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值