django mysql 表单_Django使用普通表单、Form、以及modelForm操作数据库方式总结

Django使用普通表单、Form、以及modelForm操作数据库主要应用于增删该查的情景下,流程通用如下,只是实现方式不一样:

进入填写表单页面;

在表单页面填写信息,并提交;

表单数据验证

验证成功,和数据库进行交互(增删改查);

验证成功,页面提示表单填写失败;

一、Django使用普通表单操作数据库

1、html代码:

{% csrf_token %}

用户:

用户年龄:

2、点击增加后,页面判断填写字段是否合法(使用JavaScript或JQuery实现判断)

前端校验后,在/add/对应的view对数据进行校验以及数据保存

from polls.models import Person #导入对应model

from django.http import HttpResponseRedirecdef addbooktodatabase(request):

# 获取参数前端传递的参数

if request.method == "GET":

author_name = request.GET["author"]

author_age = request.GET["author_age"]

else:

author_name = request.POST["author"]

author_age = request.POST["author_age"]

#对前端参数按业务逻辑进行校验

#代码省略

## 保存数据到数据库

person = Person()

person.name = author_name

person.age = author_age

person.save()

return HttpResponseRedirect('/addok/')

二、Django使用自有插件Form表单操作数据库

和方法一的使用普通表单相比,使用django的Form表单更方便快捷地生成前端form表单以及对字段的校验规则;

from django.shortcuts import render, HttpResponse, redirect

from django.forms import Form, fields, widgets

from model import * #导入对应的model

#Form验证

class TestForm(Form):

inp1 = fields.CharField(min_length=4, max_length=8)

inp2 = fields.EmailField()

inp3 = fields.IntegerField(min_value=10, max_value=100)

View文件如下(添加):

def test(request):

if request.method == 'GET':

obj = TestForm()

return render(request, 'test.html', {'obj': obj})

else:

form = TestForm(request.POST)

if obj.is_valid():

#验证合格,前端的数据保存在form.cleaned_data,model的create函数保存到数据库

obj = models.Article.objects.create(**form.cleaned_data)

models.ArticleDetail.objects.create(content=content, article=obj)

return HttpResponse('提交成功')

如果是修改,相应代码改成:

obj = admin_obj.model.objects.get(id=obj_id)

if request.method == "GET":

obj_form = model_form(instance=obj)

elif request.method == "POST":

obj_form = model_form(instance=obj,data=request.POST)

if obj_form.is_valid():

obj_form.save()

html文件如下:

Title

{% csrf_token %}

输入1{{ obj.inp1 }} {{ obj.errors.inp1.0 }}

输入2{{ obj.inp2 }} {{ obj.errors.inp2.0 }}

输入3{{ obj.inp3 }} {{ obj.errors.inp3.0 }}

具体Form在前端展示以及校验方式、以及操作model的方式(增删改查)不展开,此处主要说明方式

三、Django使用插件modelForm表单操作数据库

和方法二的使用表单Form相比,modelForm具有Form中所有的验证钩子,使用django的modelForm表单不需要重新定义Form,比较方便。

缺点是和数据库model耦合性太强;

Model

class Article(models.Model):

title = models.CharField(max_length=20, unique=True)

author = models.ForeignKey('Author')

ModelForm

class ArticleForm(forms.ModelForm):

class Meta:

model = Article #对应的modelfields= "__all__"      #或('name','email','user_type')    #验证哪些字段,"__all__"表示所有字段

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值