Django Form表单,常用表单字段

在Django中,表单(Forms)是处理用户输入数据的重要工具。Django提供了两种主要方式来创建和处理表单:使用Django的表单API手动创建表单,或者使用模型表单(ModelForms)自动从数据库模型生成表单。

|-----------------------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 表单字段 | 作用 |
| forms.CharField | 在Django中,forms.CharField是用于创建Web表单的字段类型,它允许用户输入文本数据。当你在Django中创建一个表单时,你可以使用forms.CharField来定义一个文本输入框,用户可以在其中输入字符串。 |
| forms.IntegerField | 在Django中,forms.IntegerField是用于创建Web表单的字段类型,它允许用户输入整数值。当你在Django中创建一个表单时,你可以使用forms.IntegerField来定义一个字段,该字段期望用户输入一个整数 |
| forms.FloatField | 在Django中,forms.FloatField 是一个用于创建Web表单的字段类型,它允许用户输入浮点数值。当你在Django中创建一个表单时,你可以使用 FloatField 来定义一个字段,该字段期望用户输入一个浮点数。 |
| forms.DecimalField | 在Django中,forms.DecimalField 是一个用于创建Web表单的字段类型,它允许用户输入固定精度的十进制数值。当你在Django中创建一个表单时,你可以使用 DecimalField 来定义一个字段,该字段期望用户输入一个十进制数,并且你可以指定这个数值的最大位数(包括小数点两边的数字)和小数点后的位数。 |
| forms.ChoiceField | 在Django中,forms.ChoiceField 是一个用于创建Web表单的字段类型,它允许用户从一个预定义的选项列表中选择一个值。当你在Django中创建一个表单时,你可以使用 ChoiceField 来定义一个字段,该字段提供一个下拉菜单或单选按钮组,用户可以从中选择一个选项。 |
| forms.FileField | 在Django中,forms.FileField 是一个用于创建Web表单的字段类型,它允许用户上传文件。当你在Django中创建一个表单时,你可以使用 FileField 来定义一个字段,该字段期望用户选择一个文件并上传。 |
| forms.BooleanField | 在Django中,forms.BooleanField 是一个用于创建Web表单的字段类型,它允许用户输入布尔值(即 True 或 False)。当你在Django中创建一个表单时,你可以使用 BooleanField 来定义一个字段,该字段提供一个复选框,用户可以通过选中或不选中复选框来表示布尔值。 |
| forms.DateField | 在Django中,forms.DateField 是一个用于创建Web表单的字段类型,它允许用户输入日期值。当你在Django中创建一个表单时,你可以使用 DateField 来定义一个字段,该字段期望用户输入一个日期。 |
| forms.DateTimeField | 在Django中,forms.DateTimeField 是一个用于创建Web表单的字段类型,它允许用户输入日期和时间值。当你在Django中创建一个表单时,你可以使用 DateTimeField 来定义一个字段,该字段期望用户输入一个日期和时间。 |
| forms.EmailField | 在Django中,forms.EmailField 是一个用于创建Web表单的字段类型,它允许用户输入电子邮件地址。当你在Django中创建一个表单时,你可以使用 EmailField 来定义一个字段,该字段期望用户输入一个有效的电子邮件地址。 |
| forms.URLField | 在Django中,forms.URLField 是一个用于创建Web表单的字段类型,它允许用户输入URL地址。当你在Django中创建一个表单时,你可以使用 URLField 来定义一个字段,该字段期望用户输入一个有效的URL。 |
| ModelChoiceField | 在Django中,ModelChoiceField 是一个用于Django表单的特殊字段类型,它允许用户从一个模型查询集(queryset)中选择一个或多个项。这个字段通常用于创建下拉菜单或单选按钮组,其中选项来自于数据库中的模型实例。 |

1,添加模型

Test/app14/models.py

复制代码
from django.db import models

class Country(models.Model):
    name = models.CharField(max_length=100)
    code = models.CharField(max_length=2)

    def __str__(self):
        return self.name

class UserInfo(models.Model):
    first_name = models.CharField(max_length=100)
    last_name = models.CharField(max_length=100)
    email = models.EmailField()
    age = models.IntegerField()
    bio = models.TextField()
    is_subscribed = models.BooleanField(default=False)
    country = models.CharField(max_length=100)
    agree_terms = models.BooleanField()
    interest = models.TextField()
    favorite_number = models.FloatField()
    pi_value = models.DecimalField(max_digits=5, decimal_places=2)
    resume = models.FileField(upload_to='resumes/')
    birth_date = models.DateField()
    registration_time = models.DateTimeField()
    website = models.URLField()
    country_model = models.ForeignKey('Country', on_delete=models.SET_NULL, null=True)

    def __str__(self):
        return self.first_name + ' ' + self.last_name

2,添加视图函数

Test/app14/views.py

复制代码
from django.shortcuts import render, redirect
from .forms import UserInfoForm
from .models import UserInfo
import logging

def user_info_form_view(request):
    if request.method == 'POST':
        form = UserInfoForm(request.POST, request.FILES)
        if form.is_valid():
            # 创建模型实例
            user_info = UserInfo()
            # 从表单中获取已清洗的数据并赋值给模型实例
            user_info.first_name = form.cleaned_data['first_name']
            user_info.last_name = form.cleaned_data['last_name']
            user_info.email = form.cleaned_data['email']
            user_info.age = form.cleaned_data['age']
            user_info.bio = form.cleaned_data['bio']
            user_info.is_subscribed = form.cleaned_data['is_subscribed']
            user_info.country = form.cleaned_data['country']
            user_info.agree_terms = form.cleaned_data['agree_terms']
            user_info.interest = form.cleaned_data['interest']
            user_info.favorite_number = form.cleaned_data['favorite_number']
            user_info.pi_value = form.cleaned_data['pi_value']
            user_info.resume = form.cleaned_data['resume']
            user_info.birth_date = form.cleaned_data['birth_date']
            user_info.registration_time = form.cleaned_data['registration_time']
            user_info.website = form.cleaned_data['website']
            try:
                # 保存模型实例到数据库
                user_info.save()
                # 重定向到成功页面或返回响应
                return redirect('success_url')
            except Exception as e:
                # 如果发生错误,打印错误信息并返回表单页面
                logging.error(f"Error saving user info: {e}")
                return render(request, '14/user_info_form.html', {'form': form})
        else:
            # 如果表单无效,重新渲染表单页面
            return render(request, '14/user_info_form.html', {'form': form})
    else:
        # 如果请求不是POST,创建一个空表单
        form = UserInfoForm()
        # 渲染表单页面
        return render(request, '14/user_info_form.html', {'form': form})

3,添加HTML代码

Test/templates/14/user_info_form.html

复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>User Info Form</title>
</head>
<body>
    <h1>User Information Form</h1>
    <form method="post" enctype="multipart/form-data">
        {% csrf_token %}
        {{ form.as_p }}


        <button type="submit">Submit</button>
    </form>
</body>
</html>

4,添加路由地址

Test/app14/urls.py

复制代码
from django.urls import path
from . import views
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [

    path('my_form_view/', views.my_form_view, name='my_form_view'),
    path('upload_document/', views.upload_document, name='upload_document'),
    path('success/', views.success_view, name='success_url'),

    path('user_info_form_view/', views.user_info_form_view, name='user_info_form_view'),

] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

5,执行迁移

复制代码
python manage.py makemigrations app14

python manage.py migrate app14

插入数据

复制代码
select * from app14_country ac ;

INSERT INTO db1.app14_country
(id, name, code)
VALUES(1, '中国', 'cn');
INSERT INTO db1.app14_country
(id, name, code)
VALUES(2, '美国', 'US');

6,访问页面

http://127.0.0.1:8000/app14/user_info_form_view/

http://127.0.0.1:8000/app14/success/

相关推荐
ss2736 小时前
AI全栈实战 | 3.2-01 Python 基础:四大数据容器怎么选,推导式为什么是 Pythonic 的灵魂
开发语言·人工智能·python
计算机毕业编程指导师6 小时前
【大数据毕设选题推荐】基于Spark的WTA职业网球赛事演变与竞技格局分析系统源码 毕业设计 选题推荐 毕设选题 数据分析 机器学习 深度学习
大数据·python·计算机·spark·毕业设计·课程设计·wta网球
言乐66 小时前
Python区分广度优先深度优先宽度优先的区别
python·算法·深度优先·广度优先·宽度优先
打工仔折腾 AI7 小时前
LLaMA 1 到 LLaMA 3 架构演进拆解:从 RoPE、GQA 到词表扩张
人工智能·后端·python·深度学习·langchain·llama
旋生万物7 小时前
螺旋角分布的功率谱分析:多窗谱 + FDR 校正
开发语言·python
专业程序开发源7 小时前
SSM校园拍摄交流服务平台36936-计算机课程设计、毕业设计
java·spring boot·后端·python·elasticsearch·php·课程设计
wuyk5558 小时前
Python 网络爬虫入门到实战 第 04 章:请求头、UA 伪装、超时、异常处理、基础反爬绕过
开发语言·爬虫·python
kaiyou20268 小时前
用户研究岗秋招,统计分析能力怎么学习和证明?
数据库·python·学习
weixin_440730508 小时前
装饰器decorator总结(函数即是变量、高阶函数、嵌套函数、参数组)
python·装饰器
零基础1238 小时前
LLM Agent 驱动的物模型构建:从设备手册到边缘接入的自动化实践
运维·人工智能·经验分享·python·自动化