首页 > 其他分享 >【django学习-20】新增用户(ModelForm方式)

【django学习-20】新增用户(ModelForm方式)

时间:2024-05-13 22:31:04浏览次数:15  
标签:20 name form django field import ModelForm class

  • 1.什么是ModelForm?

    • ModelForm顾名思义就Form和Django的Model数据库模型结合体,可以简单、方便得对数据库进行增加、编辑操作和验证标签的生成;
    • 比如我们的数据库中有这样一张学生表,字段有姓名,年龄,爱好,邮箱,电话,住址,注册时间等等一大堆信息,现在让你写一个创建学生的页面,你的后台应该怎么写呢?
    • 首先我们会在前端一个一个罗列出这些字段,让用户去填写,然后我们从后天一个一个接收用户的输入,创建一个新的学生对象,保存其实,重点不是这些,而是合法性验证,我们需要在前端判断用户输入是否合法,比如姓名必须在多少字符以内,电话号码必须是多少位的数字,邮箱必须是邮箱的格式这些当然可以一点一点手动写限制,各种判断,这毫无问题,除了麻烦我们现在有个更优雅的方法:ModelForm。
  • 2.使用ModelForm实现新增用户

    • 2.1:创建ModelForm
from app01.utils.bootstrap import BootStrapModelForm
from app01 import models
from django import forms
from django.core.validators import RegexValidator
from django.core.exceptions import ValidationError

class UserModelForm(BootStrapModelForm):
    name = forms.CharField(min_length=3,label="用户名")
    class Meta:
        model = models.UserInfo
        fields = ["name", "password", "age", 'account', 'create_time', "gender", "depart"]
        # 生成标签的时候,加上attrs={"class": "form-control"}样式
        # widgets = {
        #     "name": forms.TextInput(attrs={"class": "form-control"}),
        #     "password": forms.PasswordInput(attrs={"class": "form-control"}),
        #     "age": forms.TextInput(attrs={"class": "form-control"}),
        # }

    # def __init__(self,*args,**kwargs):
    #     super().__init__(*args,**kwargs)
    #
    #     for name,field in self.fields.items():
    #         # print(name,field)
    #         # 循环给每个字段加样式
    #         # if name == "password":
    #         #     continue
    #         field.widget.attrs = {"class": "form-control"}

  • 2.2:视图函数
from django.shortcuts import render, redirect
from app01 import models
from app01.utils.pagination import Pagination
from app01.utils.form import UserModelForm

def user_model_form_add(request):
    """ 添加用户(ModelForm版本)"""
    if request.method == "GET":
        form = UserModelForm()
        return render(request, 'user_model_form_add.html', {"form": form})

    # 用户POST提交数据,数据校验。
    form = UserModelForm(data=request.POST)
    if form.is_valid():
        # 如果数据合法,保存到数据库
        # {'name': '123', 'password': '123', 'age': 11, 'account': Decimal('0'), 'create_time': datetime.datetime(2011, 11, 11, 0, 0, tzinfo=<UTC>), 'gender': 1, 'depart': <Department: IT运维部门>}
        # print(form.cleaned_data)
        # models.UserInfo.objects.create(..)
        form.save()
        return redirect('/user/list/')

    # 校验失败(在页面上显示错误信息)
    return render(request, 'user_model_form_add.html', {"form": form})
  • 2.3:前端界面展示
<form method="post" novalidate>
    {% csrf_token %}

    {% for field in form %}
        <div class="form-group">
            <label>{{ field.label }}</label>
            {{ field }}
            <span style="color: red;">{{ field.errors.0 }}</span>
        </div>
    {% endfor %}

    <button type="submit" class="btn btn-primary">提 交</button>
</form>

标签:20,name,form,django,field,import,ModelForm,class
From: https://www.cnblogs.com/xwltest/p/18190206

相关文章

  • PKUSC2024 游记
    事不过三,但是第三次/cfDay\([-7,-3]\)一些模拟赛&适应linux。挺答辩的。三场加起来只在第二场过了一题,还是中午加班过的,第一场的答辩背包没调出来。代码能力太差。第三场摆烂了,拿了40pts跑路。这段时间都比较想摆烂的说(周四清理了一下键盘。非常舒畅啊!并且还把旁边的yhd......
  • .NET周刊【5月第1期 2024-05-05】
    国内文章一个开源轻量级的C#代码格式化工具(支持VS和VSCode)https://www.cnblogs.com/Can-daydayup/p/18164905CSharpier是一个开源、免费的C#代码格式化工具,特点是轻量级且依赖Roslyn引擎重构代码格式。支持的IDE包括VisualStudio(2019与2022)和VisualStudioCode等。该项......
  • 【django学习-19】基本流程与用户管理界面(原始方式)
    1.安装及创建项目1.1:安装django,pipinstalldjango1.2:创建项目:django-adminstartproject项目名称1.3:创建app:pythonmanage.pystartappapp名称1.4:使用pychram创建项目:1.4.1:注意点,pycharm在标准的基础上默认给咱们加了点东西1.4.2:创建了一个templates目录【删除】1.......
  • 2024盘古石取证比赛(服务器)
      检材链接:https://pan.baidu.com/s/1YWxb2xlkN7kZTZO4scG5Kw?pwd=4dd8 容器密码:2b26ba7ed35d622d8ec19ad0322abc52160ddbfa 前期准备工作veracrypt解压火眼仿真im.dd,web.dd虚拟机开启虚拟机进入vm环境,但是进去出现问题——不知道用户名(火眼会把密码修改为123456)—......
  • linux里安装sql2022详细步骤
    https://learn.microsoft.com/zh-tw/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-linux-ver16&preserve-view=true&tabs=ubuntu2004https://learn.microsoft.com/zh-tw/sql/linux/quickstart-install-connect-ubuntu?view=sql-server-linux-ver16&a......
  • 20240513打卡
    第十二周第一天第二天第三天第四天第五天第六天第七天所花时间1h代码量(行)144博客量(篇)1知识点了解界面美化CSS,mdn官网学习......
  • Testing Egineer note:2024_5_13-day08-part02
    数据库mysql命令1.启动mysqlservicemysqldstart#开启数据库(我们使用数据要保持数据库开启)servicemysqldstatus#查看数据库的状态servicemysqldstop#关闭数据库servicemysqldrestart#重启数据库2.进入数据库与账户密码设置mysqladmin-urootpassword'123456......
  • Django 安全性与防御性编程:如何保护 Django Web 应用
    title:Django安全性与防御性编程:如何保护DjangoWeb应用date:2024/5/1320:26:58updated:2024/5/1320:26:58categories:后端开发tags:CSRFXSSSQLUploadHTTPOnlyPasswordSession跨站请求伪造(CSRF)跨站请求伪造(CSRF)是一种常见的网络攻击,它利用用户的身份......
  • PKUSC & APIO 2024 游记
    Day0因学校名额过剩,参加生物学联赛,大概率省四。因大暴雨延误3小时抵达杭州。杭州晚上比广东略冷。Day1早上试机调试了1h的sublime配置。中午饭很难吃,而且报告厅很难休息。13:00开考。先看T1,思考了一会,发现这个题是每次单点修改,求最长回文串,根本无法做。打sub2,然......
  • 洛谷P3556 [POI2013] MOR-Tales of seafaring的三种解法
    本题模板为奇偶最短路(边权为1时的),题目链接:https://www.luogu.com.cn/problem/P3556为了研究,码了三种不同最短路解放的奇偶做法,便于不同群体理解.一:BFS,对于边权为1,求最短路当然是BFS最快了,时间复杂度:o(nm),代码如下:点击查看代码//背景:我的BFS奇偶最短路尝试//思......