马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
在Django中,表单(Forms)是处置惩罚用户输入数据的紧张工具。Django提供了两种紧张方式来创建和处置惩罚表单:利用Django的表单API手动创建表单,大概利用模子表单(ModelForms)自动从数据库模子生成表单。
| 表单字段 | 作用 | | 在Django中,forms.CharField是用于创建Web表单的字段范例,它答应用户输入文本数据。当你在Django中创建一个表单时,你可以利用forms.CharField来界说一个文本输入框,用户可以在此中输入字符串。 | | 在Django中,forms.IntegerField是用于创建Web表单的字段范例,它答应用户输入整数值。当你在Django中创建一个表单时,你可以利用forms.IntegerField来界说一个字段,该字段盼望用户输入一个整数 | | 在Django中,forms.FloatField 是一个用于创建Web表单的字段范例,它答应用户输入浮点数值。当你在Django中创建一个表单时,你可以利用 FloatField 来界说一个字段,该字段盼望用户输入一个浮点数。 | | 在Django中,forms.DecimalField 是一个用于创建Web表单的字段范例,它答应用户输入固定精度的十进制数值。当你在Django中创建一个表单时,你可以利用 DecimalField 来界说一个字段,该字段盼望用户输入一个十进制数,并且你可以指定这个数值的最大位数(包括小数点双方的数字)和小数点后的位数。 | | 在Django中,forms.ChoiceField 是一个用于创建Web表单的字段范例,它答应用户从一个预界说的选项列表中选择一个值。当你在Django中创建一个表单时,你可以利用 ChoiceField 来界说一个字段,该字段提供一个下拉菜单或单选按钮组,用户可以从中选择一个选项。 | | 在Django中,forms.FileField 是一个用于创建Web表单的字段范例,它答应用户上传文件。当你在Django中创建一个表单时,你可以利用 FileField 来界说一个字段,该字段盼望用户选择一个文件并上传。 | | 在Django中,forms.BooleanField 是一个用于创建Web表单的字段范例,它答应用户输入布尔值(即 True 或 False)。当你在Django中创建一个表单时,你可以利用 BooleanField 来界说一个字段,该字段提供一个复选框,用户可以通过选中或不选中复选框来表现布尔值。 | | 在Django中,forms.DateField 是一个用于创建Web表单的字段范例,它答应用户输入日期值。当你在Django中创建一个表单时,你可以利用 DateField 来界说一个字段,该字段盼望用户输入一个日期。 | | 在Django中,forms.DateTimeField 是一个用于创建Web表单的字段范例,它答应用户输入日期和时间值。当你在Django中创建一个表单时,你可以利用 DateTimeField 来界说一个字段,该字段盼望用户输入一个日期和时间。 | | 在Django中,forms.EmailField 是一个用于创建Web表单的字段范例,它答应用户输入电子邮件地址。当你在Django中创建一个表单时,你可以利用 EmailField 来界说一个字段,该字段盼望用户输入一个有用的电子邮件地址。 | | 在Django中,forms.URLField 是一个用于创建Web表单的字段范例,它答应用户输入URL地址。当你在Django中创建一个表单时,你可以利用 URLField 来界说一个字段,该字段盼望用户输入一个有用的URL。 | | 在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/
|