Django网站建设-ModelFrom,url分发,HttpResponse配合Ajax,模板复用,重定向

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 %}

HttpR

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值