[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


 

你可能感兴趣的:(Python学习笔记)