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表单的字段类型,它允许用户输入布尔值(即 TrueFalse)。当你在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/

相关推荐
databook9 小时前
Manim实现闪光轨迹特效
后端·python·动效
Juchecar10 小时前
解惑:NumPy 中 ndarray.ndim 到底是什么?
python
用户83562907805111 小时前
Python 删除 Excel 工作表中的空白行列
后端·python
Json_11 小时前
使用python-fastApi框架开发一个学校宿舍管理系统-前后端分离项目
后端·python·fastapi
数据智能老司机17 小时前
精通 Python 设计模式——分布式系统模式
python·设计模式·架构
数据智能老司机18 小时前
精通 Python 设计模式——并发与异步模式
python·设计模式·编程语言
数据智能老司机18 小时前
精通 Python 设计模式——测试模式
python·设计模式·架构
数据智能老司机18 小时前
精通 Python 设计模式——性能模式
python·设计模式·架构
c8i18 小时前
drf初步梳理
python·django
每日AI新事件18 小时前
python的异步函数
python