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>