Django(9)-表单处理

django支持使用类创建表单实例

polls/forms.py

python 复制代码
from django import forms
class NameForm(forms.Form):
    your_name=forms.CharField(label="Your name",max_length=100)

这个类创建了一个属性,定义了一个文本域,和它的label和最大长度。

polls/views.py

python 复制代码
def name(request):
    #定义了一个form传给name.html模板,在模板中就不需要定义form的具体字段了
    form=NameForm()
    return render(request,"polls/name.html",{"form":form})

在视图函数中定义name函数,创建了一个空的NameForm实例,并将这个form实例渲染给模板的form字段

模板

在模板中可以直接使用双引号引用这个form,而不需要再定义html input标签。

html 复制代码
<form action=""{% url 'polls:yourname' %}" method="post">
    {% csrf_token %}
    {{ form }}
    <input type="submit" value="Submit">
</form>

这个模板会将实例from渲染出来如下图。

表单处理函数,将提交数据传给form,并使用方法is_valid()校验表单有效性。这个方法会返回 True

并将表单的数据放到它的属性 cleaned_data 中。

python 复制代码
def get_name(request):
    if request.method=="POST":
        form=NameForm(request.POST)
        if form.is_valid():
            return HttpResponseRedirect("/thanks/")
    else:
        form=NameForm()
        return render(request,"name.html",{"form":form})

form = NameForm(request.POST) 这叫"绑定数据到表单" (现在它是一张 绑定的 表单)。

已验证的表单数据将被放到 form.cleaned_data 字典中。这里的数据已经很好的为你转化为Python类型。

可以直接从表单中取值:subject = form.cleaned_data["subject"]

当然也可以直接从request.POST取值,但是不推荐,因为这样的数据没有经过验证。

在Django中使用表单可以方便地处理用户输入和数据验证。以下是在Django中使用表单的一般步骤:

  1. 定义表单类:在你的Django应用程序中,创建一个用于表示表单的类。这个类通常继承自django.forms.Form类,并定义表单需要包含的字段。
python 复制代码
from django import forms

class MyForm(forms.Form):
    field1 = forms.CharField(max_length=100)
    field2 = forms.EmailField()
    # 添加其他字段...
  1. 创建表单实例:在需要显示表单的视图函数中,创建表单的实例,并将其传递给模板。
python 复制代码
def my_view(request):
    form = MyForm()
    return render(request, 'my_template.html', {'form': form})
  1. 编写HTML模板:创建一个模板来显示表单,并将表单字段的HTML代码插入到适当的位置。
html 复制代码
<form method="post" action="{% url 'my_form_url' %}">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">提交</button>
</form>

这里form.as_p可以将表单渲染为段落形式的HTML。你还可以使用form.as_tableform.as_ul等方法来渲染表单。

  1. 处理表单提交:在接收到表单提交的视图函数中,需要处理用户提交的数据,进行数据验证和处理。
python 复制代码
def my_view(request):
    if request.method == 'POST':
        form = MyForm(request.POST)
        if form.is_valid():
            # 处理表单数据...
            return HttpResponseRedirect('/success/')
    else:
        form = MyForm()
    return render(request, 'my_template.html', {'form': form})

在这个示例中,我们首先检查请求方法是否为POST,然后使用用户提交的数据实例化表单对象。然后,我们调用form.is_valid()来验证表单数据是否有效。如果表单数据有效,则可以进行处理,例如保存到数据库或执行其他操作。如果表单数据无效,则需要返回一个包含验证错误信息的表单给用户重新填写。

以上是基本的使用表单的步骤,你可以根据自己的需求和业务逻辑进行相应的定制和扩展。

相关推荐
kobe_OKOK_2 小时前
tdeinge REST API 客户端
python·缓存·django
Blossom.1184 小时前
Prompt工程与思维链优化实战:从零构建动态Few-Shot与CoT推理引擎
人工智能·分布式·python·智能手机·django·prompt·边缘计算
Darenm11110 小时前
JWT鉴权的实现:从原理到 Django + Vue3
后端·python·django
luoluoal12 小时前
基于python的自然语言处理技术的话题文本分类的研究(源码+文档)
python·mysql·django·毕业设计·源码
奕成则成14 小时前
Django使用
后端·python·django
计算机徐师兄15 小时前
Python基于Django的网络入侵检测系统(附源码,文档说明)
python·django·网络入侵检测·网络入侵检测系统·python网络入侵检测系统·网络入侵·python网络入侵检测
计算机毕设指导617 小时前
基于Django的本地健康宝微信小程序系统【源码文末联系】
java·后端·python·mysql·微信小程序·小程序·django
luoluoal19 小时前
基于python的病人信息管理系统及安全策略分析(源码+文档)
python·mysql·django·毕业设计·源码
Blossom.1181 天前
多模态大模型LoRA微调实战:从零构建企业级图文检索系统
人工智能·python·深度学习·学习·react.js·django·transformer
luoluoal2 天前
基于python的des知识图谱的百科知识问答平台(源码+文档)
python·mysql·django·毕业设计