ModelFrom
ModelForm直接利用了原有的model去生成From,自定义需要原有的哪些字段,并可以新赠字段,直接调用save()保存至数据库中
直接在需要的app下创建form,用于form的构建,model参数指明了是哪个model中的哪个数据,fields用于指明需要什么字段。
from django import forms
from operation.models import UserAsk
class UserAskForm(forms.ModelForm):
class Meta:
model = UserAsk
fields = ['UserName','MobileNumber','AddTime']
在view中直接把form传进来,在view中接受request.POST的数据,并用save函数直接存储进入关联数据库
class UserAskView(View):
def post(self,request):
user_ask_form = UserAskForm(request.POST)
if user_ask_form.is_valid():
user_ask = user_ask_form.save(commit=True) #直接用于数据库存储
Django允许每个app有自己的url,支持url的分发,然后再include入总的urls中
在指定app中加入url文件,用于存储定制域名下的所有的子域名集合
from django.conf.urls import url,include
from organization.views import OrganiztionListView
urlpatterns = [
url(r'organization_list/', OrganiztionListView.as_view(), name='organiztion_list'),
]
在urls中利用include函数,说明organization域名下含有include内的organization.url的所有url
# organiztion 的url分发,namespace用于重名的处理
url(r'^organization/', include('organization.url',namespace='organiztion')),
在app的url中绑定好organization:user_ask的视图函数
url(r'^user_ask/$', UserAskView.as_view(), name='user_ask'),
Django采用HttpResponse方法,结合Ajax技术实现表单提交。使用post的方法,获取html提交表单内容,并在form中进行验证,通过HttpResponse返回状态码,content_type=’application/json’,表面返回为json
class UserAskView(View):
def post(self,request):
user_ask_form = UserAskForm(request.POST)
if user_ask_form.is_valid():
user_ask = user_ask_form.save(commit=True) #直接用于数据库存储
#return HttpResponse("{'status':'success'}",content_type='application/json') #注明返回的字符串格式
return HttpResponse(json.dumps({'status':'success'}), content_type='application/json') # 注明返回的字符串格式
else:
return HttpResponse(json.dumps({'status':'fail','msg':'添加出错啦'}),content_type='application/json') #返回form的errors信息
使用Django和Python创建Json response
在form表单中添加验证,以clean开头,对字段进行验证,错误信息生成ValidationError信息
class UserAskForm(forms.ModelForm):
class Meta:
model = UserAsk
fields = ['UserName','MobileNumber','CourseName']
def clean_MobileNumber(self): #以clean开头,检测字段放在后面
MobileNumber = self.cleaned_data['MobileNumber']
REGEXG_MOBILE = '^(13[0-9]|14[579]|15[0-3,5-9]|17[0135678]|18[0-9])\\d{8}$'
p = re.compile(REGEXG_MOBILE)
if p.match(MobileNumber):
return MobileNumber
else:
raise forms.ValidationError(u'手机号码格式不正确',code='mobile_invalid')
在模板中添加Ajax,实现对表单异步提交,提交至url:”{% url ‘organization:user_ask’ %}”中
{% block custom_js %}
<script>
$(function(){
$('#jsStayBtn').on('click', function(){
$.ajax({
cache: false,
type: "POST",
url:"{% url 'organization:user_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>
{% endblock %}