我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Django—Form、ModelFor

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Django—Form、ModelFor

一、Form

 

form.py

from django import forms
from django.core.exceptions import ValidationError
from django.contrib.auth.models import User
import re


# 定义手机号验证规则
def phone_validate(value):
    phone = re.compile(r'^(13[0-9]|15[012356789]|17[678]|18[0-9]|14[57])[0-9]{8}$')
    if not phone.match(value):
        raise ValidationError("手机号格式错误")


class RegForm(forms.Form):
    username = forms.CharField(
        label="用户名",
        min_length=6,
        initial="请输入用户名",
        error_messages={
            'required': "不能为空",
            "invalid": "格式错误",
            "min_length": "用户名最短6位"
        },
        widget=forms.widgets.TextInput(attrs={"class": "form-control"})
    )

    password = forms.CharField(
        label="密码",
        min_length=8,
        widget=forms.widgets.PasswordInput(attrs={"class": "form-control"}, render_value=True),
        error_messages={
            "required": "不能为空",
            "min_length": "不能少于8位"
        }
    )

    re_password = forms.CharField(
        label="密码",
        min_length=8,
        widget=forms.widgets.PasswordInput(attrs={"class": "form-control"}, render_value=True),
        error_messages={
            "required": "不能为空",
            "min_length": "不能少于8位"
        }
    )

    email = forms.EmailField(
        label="邮箱",
        widget=forms.widgets.TextInput(attrs={"class": "form-control"}),
        error_messages={
            'required': "不能为空",
            "invalid": "格式错误",
        }
    )

    # radio
    gender = forms.fields.ChoiceField(
        choices=((1,"男"),(0,"女"),),
        label="性别",
        initial=1,
        widget=forms.widgets.RadioSelect()
    )

    # 单选select
    se_hobby = forms.fields.ChoiceField(
        label="select单选爱好",
        choices=((1,"篮球"),(2,"网球"),(3,"羽毛球"),),
        # initial=1,
        widget=forms.widgets.Select()
    )

    # 多选select
    se_hobbys = forms.fields.MultipleChoiceField(
        label="select多选爱好",
        choices=((1, "篮球"), (2, "网球"), (3, "羽毛球"),),
        initial=[1,],
        widget=forms.widgets.SelectMultiple()
    )

    # 单选checkbox
    keep_username = forms.fields.ChoiceField(
        label="记住用户名",
        # initial="checked",
        widget=forms.widgets.CheckboxInput()
    )

    # 多选checkbox
    ch_hobbys = forms.fields.MultipleChoiceField(
        label="checkbox多选爱好",
        choices=((1, "篮球"), (2, "网球"), (3, "羽毛球"),),
        # initial=[1, 2],
        widget=forms.widgets.CheckboxSelectMultiple()
    )

    # 手机号
    phone = forms.fields.CharField(
        validators=[phone_validate, ],
        error_messages={
            "required": "手机不能为空"
        },
        widget=forms.widgets.TextInput(attrs={"class": "form-control"})
    )

    # # 批量增加样式
    # def __init__(self, *args, **kwargs):
    #     super(RegForm, self).__init__(*args, **kwargs)
    #     for field in iter(self.fields):
    #         self.fields[field].widget.attrs.update({
    #             'class': 'form-control'
    #         })
    # 
    #     # 动态获取数据库的choice数据
    #     self.fields["gender"].choices = User.objects.all().values_list("id", "gender")


    # 重写全局的钩子函数,对确认密码做校验
    def clean(self):
        password = self.cleaned_data.get("password")
        re_password = self.cleaned_data.get("re_password")
        if re_password and re_password != password:
            self.add_error("re_password", ValidationError("两次输入的密码不一致"))
        else:
            return self.cleaned_data

    # 定义局部钩子,验证用户名是否被注册
    def clean_username(self):
        username = self.cleaned_data.get("username")
        is_exist = User.objects.filter(username=username)
        if is_exist:
            self.add_error("username", ValidationError("用户名已被注册"))
        else:
            return username

    # 定义局部钩子,验证邮箱是否可用
    def clean_email(self):
        email = self.cleaned_data.get("email")
        is_exist = User.objects.filter(email=email)
        if is_exist:
            self.add_error("email", ValidationError("邮箱不可用"))
        else:
            return email
View Code

view.py

def reg(request):
    form_obj = RegForm()
    if request.method == "POST":
        ret = {"status": 0, "msg": ""}
        form_obj = RegForm(request.POST)
        if form_obj.is_valid():
            # form_obj.cleaned_data.pop("re_password")
            # print(form_obj.cleaned_data)
            # User.objects.create_user(**form_obj.cleaned_data)
            ret["msg"] = "/login"
            return JsonResponse(ret)
        else:
            # print(form_obj.errors)
            ret["status"] = 1
            ret["msg"] = form_obj.errors
            return JsonResponse(ret)
    return render(request, 'register.html', {"forms_obj": form_obj})
View Code

register.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta http-equiv='Content-type' content='text/htm'>
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
    <script class="lazy" data-src="/static/jquery-3.3.1.js"></script>
    <script class="lazy" data-src="/static/bootstrap/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-md-6 col-md-offset-3 reg-form">
            <h3 class="text-center">Register</h3><br>
            <form class="form-horizontal" novalidate  method="post"
                  enctype="multipart/form-data">
                {% csrf_token %}
                <div class="form-group ">
                    <label for='{{ forms_obj.username.id_for_label }}'
                           class="col-sm-2 control-label">{{ forms_obj.username.label }}</label>
                    <div class="col-sm-8">
                        {{ forms_obj.username }}
                        <span class="help-block">{{ forms_obj.username.errors.0 }}</span>
                        <span id="ss" class="help-block"></span>
                    </div>
                </div>

                <div class="form-group ">
                    <label for='{{ forms_obj.password.id_for_label }}'
                           class="col-sm-2 control-label">{{ forms_obj.password.label }}</label>
                    <div class="col-sm-8">
                        {{ forms_obj.password }}
                        <span class="help-block">{{ forms_obj.password.errors.0 }}</span>
                    </div>
                </div>

                <div class="form-group ">
                    <label for='{{ forms_obj.re_password.id_for_label }}'
                           class="col-sm-2 control-label">{{ forms_obj.re_password.label }}</label>
                    <div class="col-sm-8">
                        {{ forms_obj.re_password }}
                        <span class="help-block">{{ forms_obj.re_password.errors.0 }}</span>
                    </div>
                </div>

                <div class="form-group">
                    <label for="{{ forms_obj.email.id_for_label }}"
                           class="col-sm-2 control-label">{{ forms_obj.email.label }}</label>
                    <div class="col-sm-8">
                        {{ forms_obj.email }}
                        <span class="help-block">{{ forms_obj.email.errors.0 }}</span>
                    </div>
                </div>

                <div class="form-group">
                    <label for="{{ forms_obj.gender.id_for_label }}"
                           class="col-sm-2 control-label">{{ forms_obj.gender.label }}</label>
                    <div class="col-sm-8">
                        {{ forms_obj.gender }}
                        <span class="help-block">{{ forms_obj.gender.errors.0 }}</span>
                    </div>
                </div>

                <div class="form-group">
                    <label for="{{ forms_obj.se_hobby.id_for_label }}"
                           class="col-sm-2 control-label">{{ forms_obj.se_hobby.label }}</label>
                    <div class="col-sm-8">
                        {{ forms_obj.se_hobby }}
                        <span class="help-block">{{ forms_obj.se_hobby.errors.0 }}</span>
                    </div>
                </div>

                <div class="form-group">
                    <label for="{{ forms_obj.se_hobbys.id_for_label }}"
                           class="col-sm-2 control-label">{{ forms_obj.se_hobbys.label }}</label>
                    <div class="col-sm-8">
                        {{ forms_obj.se_hobbys }}
                        <span class="help-block">{{ forms_obj.se_hobbys.errors.0 }}</span>
                    </div>
                </div>

                <div class="form-group">
                    <label for="{{ forms_obj.keep_username.id_for_label }}"
                           class="col-sm-2 control-label">{{ forms_obj.keep_username.label }}</label>
                    <div class="col-sm-8">
                        {{ forms_obj.keep_username }}
                        <span class="help-block">{{ forms_obj.keep_username.errors.0 }}</span>
                    </div>
                </div>

                <div class="form-group">
                    <label for="{{ forms_obj.ch_hobbys.id_for_label }}"
                           class="col-sm-2 control-label">{{ forms_obj.ch_hobbys.label }}</label>
                    <div class="col-sm-8">
                        {{ forms_obj.ch_hobbys }}
                        <span class="help-block">{{ forms_obj.ch_hobbys.errors.0 }}</span>
                    </div>
                </div>

                <div class="form-group">
                    <label for="{{ forms_obj.phone.id_for_label }}"
                           class="col-sm-2 control-label">{{ forms_obj.phone.label }}</label>
                    <div class="col-sm-8">
                        {{ forms_obj.phone }}
                        <span class="help-block">{{ forms_obj.phone.errors.0 }}</span>
                    </div>
                </div>

                <div class="form-group">
                    <div class="col-sm-offset-3 col-sm-6">
                        <button id="reg_submit" type="button" class="btn btn-success btn-block">注册</button>
                    </div>
                </div>
            </form>
        </div>
    </div>
</div>

<script>
    $("#reg_submit").click(function () {
        var formData = new FormData();
        formData.append("username", $("#id_username").val());
        formData.append("password", $("#id_password").val());
        formData.append("re_password", $("#id_re_password").val());
        formData.append("gender", $("input[name='gender']:checked").val());
        formData.append("se_hobby", $("#id_se_hobby").val());
        formData.append("se_hobbys", $("#id_se_hobbys").val());
        formData.append("keep_username", $("#id_keep_username").prop("checked"));
        formData.append("ch_hobbys", $("#id_ch_hobbys input[name='ch_hobbys']:checked").val());
        formData.append("phone", $("#id_phone").val());
        formData.append("csrfmiddlewaretoken", $("input[name='csrfmiddlewaretoken']").val());
        $.ajax({
            url:'/register/',
            type:'post',
            processData: false,
            contentType: false,
            data:formData,
        }).done(function (data) {
            if (data.status){
                $.each(data.msg,function (k,v) {
                    $("#id_"+k).next("span").text(v[0]).parent().parent().addClass("has-error")
                })
            } 
            else {
                window.location.href = data.msg
            }
        })
    });

    $("form input").focus(function () {
        $(this).next("span").text("").parent().parent().removeClass("has-error");
    });
    $("form select").focus(function () {
        $(this).next("span").text("").parent().parent().removeClass("has-error");
    });
    $("form input[name='ch_hobbys']").focus(function () {
        $(this).parents("ul").next("span").text("").parent().parent().removeClass("has-error");
    })
</script>
</body>
</html>
View Code

 

二、ModelForm

 

form.py

from booktest.models import *
from django.forms import widgets as wds


class BookForm(forms.ModelForm):
    class Meta:
        model = BookInfo
        fields = "__all__"
        labels = {
            "btitle": "书名",
            "bpub_date": "发布日期",
            "bcomment": "评论量",
            "bread": "阅读量"
        }

        widgets = {
            "btitle": wds.TextInput(attrs={"class": "form-control"}),
            "bpub_date": wds.TextInput(attrs={"class": "form-control", "type": "date"}),
            "bread": wds.TextInput(attrs={"class": "form-control"}),
            "bcomment": wds.TextInput(attrs={"class": "form-control"})
        }

        error_messages = {
            "btitle": {"required":"不能为空",},
            "bpub_date": {"required":"不能为空",},
            "bcomment": {"required":"不能为空",},
            "bread": {"required":"不能为空",}
        }
View Code

view.py(add_book)

def add_book(request):
    form_obj = BookForm()
    if request.method == "POST":
        ret = {"status": 0, "msg": ""}
        form_obj = BookForm(data=request.POST)
        if form_obj.is_valid():
            print(form_obj.cleaned_data)
            form_obj.save()
            ret["msg"] = '/bookform'
            return JsonResponse(ret)
        else:
            ret["status"] = 1
            ret["msg"] = form_obj.errors
            return JsonResponse(ret)
    return render(request, 'add_book.html', {"forms_obj": form_obj})
View Code

add_book.html

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <meta http-equiv='Content-type' content='text/htm'>
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
    <script class="lazy" data-src="/static/jquery-3.3.1.js"></script>
    <script class="lazy" data-src="/static/bootstrap/js/bootstrap.min.js"></script>
</head>
<body>
<div class="container">
    <div class="row">
        <div class="col-md-6 col-md-offset-3 reg-form">
            <h3 class="text-center"></h3><br>
            <form class="form-horizontal" novalidate  method="post"
                  enctype="multipart/form-data">
                {% csrf_token %}
                <div class="form-group ">
                    <label for='{{ forms_obj.btitle.id_for_label }}'
                           class="col-sm-2 control-label">{{ forms_obj.btitle.label }}</label>
                    <div class="col-sm-8">
                        {{ forms_obj.btitle }}
                        <span class="help-block">{{ forms_obj.btitle.errors.0 }}</span>
                        <span id="ss" class="help-block"></span>
                    </div>
                </div>

                <div class="form-group ">
                    <label for='{{ forms_obj.bpub_date.id_for_label }}'
                           class="col-sm-2 control-label">{{ forms_obj.bpub_date.label }}</label>
                    <div class="col-sm-8">
                        {{ forms_obj.bpub_date }}
                        <span class="help-block">{{ forms_obj.bpub_date.errors.0 }}</span>
                    </div>
                </div>

                <div class="form-group ">
                    <label for='{{ forms_obj.bcomment.id_for_label }}'
                           class="col-sm-2 control-label">{{ forms_obj.bcomment.label }}</label>
                    <div class="col-sm-8">
                        {{ forms_obj.bcomment }}
                        <span class="help-block">{{ forms_obj.bcomment.errors.0 }}</span>
                    </div>
                </div>

                <div class="form-group">
                    <label for="{{ forms_obj.bread.id_for_label }}"
                           class="col-sm-2 control-label">{{ forms_obj.bread.label }}</label>
                    <div class="col-sm-8">
                        {{ forms_obj.bread }}
                        <span class="help-block">{{ forms_obj.bread.errors.0 }}</span>
                    </div>
                </div>

                <div class="form-group">
                    <div class="col-sm-offset-3 col-sm-6">
                        <button id="reg_submit" type="button" class="btn btn-success btn-block">注册</button>
                    </div>
                </div>
            </form>
        </div>
    </div>
</div>

<script>
    $("#reg_submit").click(function () {
        var formData = new FormData();
        formData.append("btitle", $("#id_btitle").val());
        formData.append("bpub_date", $("#id_bpub_date").val());
        formData.append("bcomment", $("#id_bcomment").val());
        formData.append("bread", $("#id_bread").val());
        formData.append("csrfmiddlewaretoken", $("input[name='csrfmiddlewaretoken']").val());
        $.ajax({
            url:'/bookform/',
            type:'post',
            processData: false,
            contentType: false,
            data:formData,
        }).done(function (data) {
            if (data.status){
                $.each(data.msg,function (k,v) {
                    $("#id_"+k).next("span").text(v[0]).parent().parent().addClass("has-error")
                })
            }
            else {
                window.location.href = data.msg
            }
        })
    });

    $("form input").focus(function () {
        $(this).next("span").text("").parent().parent().removeClass("has-error");
    });
</script>
</body>
</html>
View Code

view.py(edit_book)

def editbook(request, book_id):
    edit_book = BookInfo.objects.get(id=book_id)
    if request.method == "POST":
        form_obj = BookForm(request.POST, instance=edit_book)
        if form_obj.is_valid():
            form_obj.save()     # edit_book.update(request.POST)
            return redirect('/add_book')
    else:
        form_obj = BookForm(instance=edit_book)
        return render(request, 'edit_book.html', locals())
View Code

edit_book.html

<body>
<form method="post">
    {% csrf_token %}
    {% for field in form_obj %}
    <div>
    {{ field.label }}
    {{ field }}<span>{{ field.errors.0 }}</span>
    </div>
    {% endfor %}
    <input type="submit">
</form>

</body>
View Code

 

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Django—Form、ModelFor

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Django—Form、ModelFor

一、Form form.pyfrom django import formsfrom django.core.exceptions import ValidationErrorfrom django.contrib.auth.models
2023-01-31

Django form表单

Form介绍 总结一下,其实Django form组件的主要功能如下:生成页面可用的HTML标签对用户提交的数据进行校验保留上次输入内容form表单的作用:  1.生成HTML代码  2.验证  3.把验证的错误显示在页面上并保留原始数据f
2023-01-30

Django之Form组件

一 Form介绍    我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。  与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不
2023-01-30

Django 提交 form 表单

创建 Django 的过程可以参考上一篇文章 https://www.cnblogs.com/klvchen/p/10601536.html在 templates 文件夹下创建一个 index.html 文件来提交和展示数据
2023-01-31

Django 提交 form 表单(使用

优化 提交 form 表单,https://www.cnblogs.com/klvchen/p/10608143.html创建数据库的字段,在 models.py 中添加from django.db import models# Creat
2023-01-31

Django中form指的是什么

这篇文章将为大家详细讲解有关Django中form指的是什么,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。本文教程操作环境:windows7系统、django2.1,DELL G3电脑。1.概念Djang
2023-06-14

Python基础教程:一次性搞定 Django Form

最近在项目上用到了 Django 的自带的 Form 表单,遇到了一些坑,今天给大家出的这篇Python基础教程也是做了一个简单的总结,大家可以对号出坑。Form 基础介绍首先让我们先来了解下 Django 中 Form 表单的基本用法。D
2023-06-02

Form和ModelForm组件

Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来。与此同时我们在好多场景下都需要对用户的输入做校验,比如校验用户是否输入,输入的长度和格式等正不正确。如果用户
2023-01-31

怎样精确实现C#form与form之间通信

今天就跟大家聊聊有关怎样精确实现C#form与form之间通信,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。实现C# form与form之间的通信不是很容易的,笔者在网上查到了一个解
2023-06-17

Python学习:Python form

从Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能。基本语法是通过 {} 和 : 来代替以前的 % 。相对基本格式化输出采用‘%’的方法,format()功能更强大,该函数把字符串
2023-01-31

Python发送form-data请求及拼接form-data内容的方法

网上关于使用python 的发送multipart/form-data的方法,多半是采用 ulrlib2 的模拟post方法,如下:import urllib2boundary='-------------------------7df30
2022-06-04

jquery修改form中值

jQuery是一种流行的JavaScript库,可以方便地与HTML、CSS和JavaScript一起使用。在Web开发中,经常需要修改表单元素中的值,这时候我们可以借助jQuery来简化代码。本文将介绍如何使用jQuery修改表单中的值,在表单元素上添加、删除、修改属性值及设置表单元素的值。以下是详细的步骤和代码示例:1. 修改表单元素的值使用`.val()`函数可以获取或设
2023-05-18

javascript 改变form的值

在 Web 开发中,表单(Form)通常作为用户提交数据的工具,并且页面需要使用 JavaScript 来对其进行修改或控制。本文将介绍如何使用 JavaScript 来改变表单的值,同时提供一些常见的实际应用案例。### JavaScript 改变表单值的方法1.使用 JavaScript DOM 设置表单元素的值DOM 是 JavaScript 操作页面元素的标准 API,
2023-05-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录