Django Form表单,常用表单字段

[复制链接]
发表于 2024-7-28 02:15:04 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
        在Django中,表单(Forms)是处置惩罚用户输入数据的紧张工具。Django提供了两种紧张方式来创建和处置惩罚表单:利用Django的表单API手动创建表单,大概利用模子表单(ModelForms)自动从数据库模子生成表单。

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

1,添加模子

Test/app14/models.py
  1. from django.db import models
  2. class Country(models.Model):
  3.     name = models.CharField(max_length=100)
  4.     code = models.CharField(max_length=2)
  5.     def __str__(self):
  6.         return self.name
  7. class UserInfo(models.Model):
  8.     first_name = models.CharField(max_length=100)
  9.     last_name = models.CharField(max_length=100)
  10.     email = models.EmailField()
  11.     age = models.IntegerField()
  12.     bio = models.TextField()
  13.     is_subscribed = models.BooleanField(default=False)
  14.     country = models.CharField(max_length=100)
  15.     agree_terms = models.BooleanField()
  16.     interest = models.TextField()
  17.     favorite_number = models.FloatField()
  18.     pi_value = models.DecimalField(max_digits=5, decimal_places=2)
  19.     resume = models.FileField(upload_to='resumes/')
  20.     birth_date = models.DateField()
  21.     registration_time = models.DateTimeField()
  22.     website = models.URLField()
  23.     country_model = models.ForeignKey('Country', on_delete=models.SET_NULL, null=True)
  24.     def __str__(self):
  25.         return self.first_name + ' ' + self.last_name
复制代码


2,添加视图函数

Test/app14/views.py
  1. from django.shortcuts import render, redirect
  2. from .forms import UserInfoForm
  3. from .models import UserInfo
  4. import logging
  5. def user_info_form_view(request):
  6.     if request.method == 'POST':
  7.         form = UserInfoForm(request.POST, request.FILES)
  8.         if form.is_valid():
  9.             # 创建模型实例
  10.             user_info = UserInfo()
  11.             # 从表单中获取已清洗的数据并赋值给模型实例
  12.             user_info.first_name = form.cleaned_data['first_name']
  13.             user_info.last_name = form.cleaned_data['last_name']
  14.             user_info.email = form.cleaned_data['email']
  15.             user_info.age = form.cleaned_data['age']
  16.             user_info.bio = form.cleaned_data['bio']
  17.             user_info.is_subscribed = form.cleaned_data['is_subscribed']
  18.             user_info.country = form.cleaned_data['country']
  19.             user_info.agree_terms = form.cleaned_data['agree_terms']
  20.             user_info.interest = form.cleaned_data['interest']
  21.             user_info.favorite_number = form.cleaned_data['favorite_number']
  22.             user_info.pi_value = form.cleaned_data['pi_value']
  23.             user_info.resume = form.cleaned_data['resume']
  24.             user_info.birth_date = form.cleaned_data['birth_date']
  25.             user_info.registration_time = form.cleaned_data['registration_time']
  26.             user_info.website = form.cleaned_data['website']
  27.             try:
  28.                 # 保存模型实例到数据库
  29.                 user_info.save()
  30.                 # 重定向到成功页面或返回响应
  31.                 return redirect('success_url')
  32.             except Exception as e:
  33.                 # 如果发生错误,打印错误信息并返回表单页面
  34.                 logging.error(f"Error saving user info: {e}")
  35.                 return render(request, '14/user_info_form.html', {'form': form})
  36.         else:
  37.             # 如果表单无效,重新渲染表单页面
  38.             return render(request, '14/user_info_form.html', {'form': form})
  39.     else:
  40.         # 如果请求不是POST,创建一个空表单
  41.         form = UserInfoForm()
  42.         # 渲染表单页面
  43.         return render(request, '14/user_info_form.html', {'form': form})
复制代码




3,添加HTML代码

Test/templates/14/user_info_form.html
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4.     <meta charset="UTF-8">
  5.     <title>User Info Form</title>
  6. </head>
  7. <body>
  8.     <h1>User Information Form</h1>
  9.     <form method="post" enctype="multipart/form-data">
  10.         {% csrf_token %}
  11.         {{ form.as_p }}
  12.         <button type="submit">Submit</button>
  13.     </form>
  14. </body>
  15. </html>
复制代码



4,添加路由地址

Test/app14/urls.py
  1. from django.urls import path
  2. from . import views
  3. from django.conf import settings
  4. from django.conf.urls.static import static
  5. urlpatterns = [
  6.     path('my_form_view/', views.my_form_view, name='my_form_view'),
  7.     path('upload_document/', views.upload_document, name='upload_document'),
  8.     path('success/', views.success_view, name='success_url'),
  9.     path('user_info_form_view/', views.user_info_form_view, name='user_info_form_view'),
  10. ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
复制代码


5,执行迁移

  1. python manage.py makemigrations app14
  2. python manage.py migrate app14
复制代码
插入数据

  1. select * from app14_country ac ;
  2. INSERT INTO db1.app14_country
  3. (id, name, code)
  4. VALUES(1, '中国', 'cn');
  5. INSERT INTO db1.app14_country
  6. (id, name, code)
  7. VALUES(2, '美国', 'US');
复制代码



6,访问页面

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

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

回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表