layui清空表单数据_第9天 | Django3.0项目实战,部门管理系统的表单

在开发增删改查时,往往会先开发新增功能,因为有了新增功能,才有了录入数据的窗口。有了数据,你要删、要改、要查,才能水到渠成,顺理成章。在Web开发中,新增数据,往往是通过表单的方式进行录入的。

9.1 新建forms

为了方便表单的处理,Django3.0专门提供了对应的框架。应用时,你可以用鼠标右键department目录,新建一个forms.py文件。

from django import formsfrom django.forms import widgetsfrom django.core.exceptions import ValidationErrorimport reclass DepartmentForm(forms.Form):    name = forms.CharField(        label='部门名称:',        required=True,        max_length=120,        error_messages={            'required': '部门名称不能为空,请输入!',            'max_length': '部门名称太长了!'},        widget=widgets.TextInput(attrs={"placeholder":                                  "请输入部门名称", "class": "form-control"}))    leader = forms.CharField(        label='负 责 人:',        required=True,        max_length=60,        error_messages={            'required': '负责人不能为空,请输入!',            'max_length': '负责人名字太长了!'},        widget=widgets.TextInput(attrs={"placeholder":                                  "请输入负责人", "class": "form-control"}))    phone = forms.CharField(        label='手 机 号:',        required=True,        error_messages={            'required': '手机号不能为空,请输入!'},        widget=widgets.NumberInput(attrs={"placeholder":                                   "请输入手机号", "class": "form-control"}))    choice = (("集团总部", "集团总部"), ("华南区域", "华南区域"),               ("华北区域", "华北区域"), ("华东区域", "华东区域"),)    region = forms.CharField(        label='所在区域:',        initial='集团总部',        widget=widgets.Select(choices=choice,                               attrs={"class": "form-control"}))    address = forms.CharField(        required=False,        label='办公位置:',        max_length=200,        widget=widgets.TextInput(attrs={"placeholder": "办公所在位置",                                         "class": "form-control"}))    longitude = forms.DecimalField(        required=False,        label='区域经度:',        widget=widgets.NumberInput(attrs={"placeholder": "区域所在经度",                                           "class": "form-control"}))    latitude = forms.DecimalField(        required=False,        label='区域纬度:',        widget=widgets.NumberInput(attrs={"placeholder": "区域所在纬度",                                           "class": "form-control"}))    # 手机号验证    def clean_phone(self):        phone = self.cleaned_data.get('phone')        mobile_re = re.compile(r'^(13[0-9]|15[012356789]|17[678]                               |18[0-9]|14[57])[0-9]{8}$')        if not mobile_re.match(phone):            raise ValidationError('请输入正确的手机号!')        return phone

别看内容挺多的,其实都是重复的,知道其中一项的类型属性定义,其他的也妥妥的了。类型属性之前整理过,这里就不重复出现了,有关表单的控件,往下看。

1. 表单控件

Web开发语言的控件,其实就是对HTML标签的封装和提供相关配置,目的是为了方便实现表单功能,方便程序员快速实现数据收集的功能。表单控件内容如下。

1425a42c0ce59d5d6442cafea76ba03f.png

2. 控件属性

表单控件属性中,关键的点在于验证。在form中自定义验证规格有3种方式,第1种是随意定义函数名,然后用validators属性指定,函数要先定义;第2种是用约定成俗的方法,以clean_字段名定义函数名,表单在验证时,会自动读取;第3种,是在clean()函数内进行统一定义。表单控件属性选项一览表。

13e5445e2837b965d418d2769e6b3f2c.png

9.2 业务逻辑

有了表单forms.py,没有业务逻辑views.py的助力,它在模板中将手足无措,华而不实。在views.py中实现的代码来了。

from django.shortcuts import renderfrom department.forms import DepartmentFormfrom department.models import Department# 判断部门名称是否已存在def name_exist(name):    is_exist = Department.objects.filter(name=name).exists()    if is_exist:        return True    else:        return False# 添加数据def create(request):    form = DepartmentForm()    if request.method == 'POST':        msg = ''        form = DepartmentForm(request.POST)        if form.is_valid():            name = form.cleaned_data.get('name')            if name_exist(name):                form.add_error('name', "部门名称已存在,请确认!")                msg = ''            else:                department = Department()                department.name = name                department.leader = form.cleaned_data.get('leader')                department.phone = form.cleaned_data.get('phone')                department.region = form.cleaned_data.get('region')                department.address = form.cleaned_data.get('address')                department.longitude = form.cleaned_data.get('longitude')                department.latitude = form.cleaned_data.get('latitude')                department.save()                msg = '恭喜你,创建部门信息成功!'                # 重置表单内容(清空)                form = DepartmentForm()        return render(request, 'department/create.html',                       {'form': form, 'msg': msg})    else:        return render(request, 'department/create.html', {'form': form})

9.3 urls配置

有关业务逻辑在views.py实现之后,需要在department/urls.py里进行配置,才能提供地址供用户进行访问。

from django.urls import pathfrom . import viewsapp_name = 'department'urlpatterns = [    path('create/', views.create, name='create'),]

对了,别忘记在sales/urls.py中进行登记。

from django.contrib import adminfrom django.urls import pathfrom django.urls import includeurlpatterns = [    path('base/', include('base.urls')),    path('department/', include('department.urls')),    path('admin/', admin.site.urls),]

9.4 模板文件

一切业务相关的工作准备就绪,就差模板靓丽转身。在templates/department下,新建模板文件create.html。有了模板文件,表单Form就有了展露才华的机会。

表单布局,如果想要以表格的方式见人,可选用form.as_table;如果想要以段落的方式,可选用form.as_p;如果想要以序列的方式见人,可选用form.as_ul。具体选用哪种,请看需求文档中界面的要求。

    新增部门{{ msg }}    {% csrf_token %}    {{ form.as_p }}    保存    清空

温馨提示:在html5的form中加入novalidate属性,是为了禁用其自带的校验功能。

用form.as_p布局的效果,可能不是你喜欢的类型,但测试form.as_p和form.as_ul之后,你就不会这样想了。因为它们会让你大失所望,大跌眼镜。布局尽管不太如意,但请你不要捶胸顿足,因为捶胸很痛的。

运行项目之后,在浏览器输入http://127.0.0.1:8000/department/create/,输出结果如下。

c7344da1e33d585c8aca8fa281f2af13.png

好了,有关部门管理系统的表单内容,老陈讲完了,如果觉得对你有所帮助,希望你能转发点赞,让更多的人看到这篇文章。你的转发和点赞,就是对老陈继续创作和分享最大的鼓励。

一个当了10年技术总监的老家伙,分享多年的编程经验。想学编程的朋友,可关注今日头条:老陈说编程。我在分享Python,前端、Java和App方面的干货。关注我,没错的。

#Python##Django##程序员##Web##项目实战#

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值