Django Form常用功能及代码示例

下面我将详细讲解“Django Form常用功能及代码示例”的完整攻略,包含两条示例说明。

1. Django Form常用功能

1.1 定义Form

Django中的Form是用来处理表单数据的Python类。通过继承Django提供的forms.Form类,并定义相应的字段,我们可以快速创建自己的表单。

示例代码如下:

from django import forms

class ContactForm(forms.Form):
    name = forms.CharField()
    email = forms.EmailField()
    message = forms.CharField(widget=forms.Textarea)

上述代码中,我们定义了一个ContactForm类,包含了三个字段:name(用于输入姓名)、email(用于输入邮箱)、message(用于输入留言)。其中,CharField表示输入字符串类型,EmailField表示输入邮箱类型,Textarea表示输入文本类型。

1.2 渲染Form

在视图函数中,我们可以把自定义的表单实例化并传入模板,然后在模板中使用Django提供的{{ form.as_p }}{{ form.as_table }}{{ form.as_ul }}方法来渲染表单。

示例代码如下:

from django.shortcuts import render
from .forms import ContactForm

def contact(request):
    if request.method == 'POST':
        form = ContactForm(request.POST)
        if form.is_valid():
            # 处理提交表单的逻辑
            pass
    else:
        form = ContactForm()

    return render(request, 'contact.html', {'form': form})

上述代码中,我们定义了一个contact视图函数,并将自定义表单ContactForm的实例传给了模板。在模板中,我们可以使用{{ form.as_p }}方法将表单渲染成一个段落,使用{{ form.as_table }}方法将表单渲染成一个表格,使用{{ form.as_ul }}方法将表单渲染成一个列表。

1.3 表单验证

Django中的表单验证可以帮助我们快速判断表单提交的数据是否符合规范。在表单类中定义每个字段的验证规则,Django会自动帮我们完成表单验证的功能。

示例代码如下:

from django import forms

class ContactForm(forms.Form):
    name = forms.CharField(max_length=100)
    email = forms.EmailField()
    message = forms.CharField(widget=forms.Textarea)

    def clean_name(self):
        # 对name字段进行验证,返回验证后的值
        name = self.cleaned_data.get('name')

        if len(name) < 3:
            raise forms.ValidationError('姓名长度不能少于3个字符')

        return name

上述代码中,我们增加了对name字段的验证规则,当name字段的长度小于3个字符时,将抛出一个验证错误。

1.4 自定义表单控件

Django中还提供了一系列的表单控件,如TextInput、CheckboxInput等。除此之外,我们还可以通过继承forms.Widget类自定义表单控件。

示例代码如下:

from django import forms

class CalendarWidget(forms.Widget):
    def render(self, name, value, attrs=None, renderer=None):
        # 在这里编写自定义控件的渲染逻辑
        pass

class ContactForm(forms.Form):
    name = forms.CharField(widget=CalendarWidget)
    email = forms.EmailField()
    message = forms.CharField(widget=forms.Textarea)

上述代码中,我们自定义了一个日历控件CalendarWidget,并将其作为name字段的控件实例化。在render方法中,我们可以编写日历控件的HTML渲染逻辑。

2. 代码示例

2.1 示例一:Django实现用户登录

在这个示例中,我们将使用Django实现用户登录功能。用户需要输入用户名和密码,然后提交表单进行登录。如果用户名和密码验证通过,则跳转到主页,否则显示登录失败的错误信息。

先定义LoginForm表单类:

from django import forms

class LoginForm(forms.Form):
    username = forms.CharField()
    password = forms.CharField(widget=forms.PasswordInput)

LoginForm类中包括了两个字段:username(输入用户名)和password(输入密码)。其中,PasswordInput表示将密码类型的字段显示为输入密码的形式。

接下来定义视图函数login

from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect
from .forms import LoginForm

def login(request):
    if request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data['username']
            password = form.cleaned_data['password']
            user = authenticate(username=username, password=password)

            if user is not None:
                login(request, user)
                return redirect('/')
            else:
                error_message = '用户名或密码错误'
    else:
        form = LoginForm()
        error_message = ''

    return render(request, 'login.html', {'form': form, 'error_message': error_message})

login视图函数中,我们首先判断用户请求的方法是否是POST,如果是则对表单进行验证,验证通过则从表单中获取用户名和密码,并调用Django提供的authenticate函数进行用户验证。若验证通过,则使用login函数登录用户并跳转到主页。如果未通过验证,显示用户名或密码错误的错误信息。

在模板文件中,我们可以使用Django提供的表单渲染函数来渲染表单,类似于这样:

<form method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <button type="submit">登录</button>
</form>

在render函数中,我们将LoginForm表单实例和错误信息一起传递给模板,模板使用{{ form.as_p }}方法来渲染表单,在用户提交表单后,我们通过request.POST来获取表单数据,并进行验证。

2.2 示例二:Django实现主页留言板

在这个示例中,我们将使用Django实现一个简单的主页留言板功能。用户可以在主页上发布留言,同时查看其他人发布的留言。

先定义MessageForm表单类:

from django import forms

class MessageForm(forms.Form):
    title = forms.CharField()
    content = forms.CharField(widget=forms.Textarea)

MessageForm类中包括了两个字段:title(输入留言主题)和content(输入留言内容)。其中,Textarea表示输入文本类型。

接下来定义Message模型:

from django.db import models

class Message(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    create_time = models.DateTimeField(auto_now_add=True)

在模型中,我们需要定义每个字段的类型和其他相关参数,例如CharFieldTextField以及DateTimeField等等。其中,auto_now_add=True表示新增数据时自动设置为当前时间。

接着定义视图函数index

from django.shortcuts import render, redirect
from .forms import MessageForm
from .models import Message

def index(request):
    if request.method == 'POST':
        form = MessageForm(request.POST)
        if form.is_valid():
            title = form.cleaned_data['title']
            content = form.cleaned_data['content']
            message = Message(title=title, content=content)
            message.save()
            return redirect('/')
    else:
        form = MessageForm()

    messages = Message.objects.all().order_by('-create_time')

    return render(request, 'index.html', {'form': form, 'messages': messages})

index视图函数中,我们判断用户请求的方法是否是POST,如果是则对表单进行验证,验证通过则从表单中获取留言主题和留言内容,然后新建一条留言并保存。最后,在GET请求时,我们查询数据库中所有的留言,并按照创建时间的倒序进行排序,然后传递给模板。

在模板文件中,我们可以使用Django提供的模板标记和过滤器来迭代留言,并使用{{ form.as_p }}方法来渲染表单,在用户提交表单后,我们通过request.POST来获取表单数据,并进行验证。

以上就是「Django Form常用功能及代码示例」的完整攻略,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django Form常用功能及代码示例 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • Django实现微信消息推送

    一 所需准备条件 微信公众号的分类 微信消息推送 公众号 已认证公众号 服务号 已认证服务号 企业号 基于:微信认证服务号 主动推送微信消息。前提:关注服务号环境:沙箱环境 沙箱环境地址: https://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login 二 基本流程 注册开发者账号 获得:appI…

    Django 2023年4月11日
    00
  • 使用Pycharm创建一个Django项目的超详细图文教程

    下面就是关于如何使用Pycharm创建一个Django项目的超详细图文教程的完整攻略。 1. 准备工作 在开始创建Django项目之前,需要先确保已经安装了Python和Pycharm。 2. 创建项目 打开Pycharm,点击“Create New Project”按钮,进入“New Project”界面。在此界面中需要输入以下信息: 项目名称:自定义名称…

    Django 2023年5月16日
    00
  • Django框架 信号调度原理解析

    Django框架 信号调度原理解析 什么是信号 在Django框架中,信号是一种轻量级的通信机制,在模型的某个事件发生时,允许接收信号的函数被调用。信号接收器是用于在特定时间监听特定模型的函数。 信号的作用 信号的主要作用就是当模型发生变化时自动调用某些函数,在特定的时间做一些特定的操作,比如在某个模型的数据被更新时,自动发送邮件通知相关的人员。 信号的种类…

    Django 2023年5月16日
    00
  • Python——Django-urls.py的作用

    一、urls.py的作用是保存路径和函数的对应关系 二、函数返回指定内容 from django.urls import path #引用HTTP协议的代码 from django.shortcuts import HttpResponse def yimi(request): #request参数保存了所有和用户浏览器请求相关的数据,返回指定内容 retu…

    Django 2023年4月10日
    00
  • django 在保存数据前进行数据校验

    我们想在保存用户进入数据库之前做一些字段的校验,先贴出代码; import re from django.db import models from django.db.models.signals import pre_save from django.dispatch import receiver UNAME_REG = re.compile(r”^\…

    Django 2023年4月13日
    00
  • Python 做Django 项目遇到问题:Not Found: /c_hello(或/c_webskt/)

    出现如图所示的情况,一般先看端口是否被占用,或者更换端口号重新启动服务 查看指定端口占用情况netstat -aon | findstr 8000 查看对应PID进程tasklist|findstr “18836” 结束该进程taskkill /f /t /im CLodopPrint32.exe

    Django 2023年4月13日
    00
  • 简化Python的Django框架代码的一些示例

    我们来详细讲解一下“简化Python的Django框架代码的一些示例”的完整攻略。 1. 删除重复代码 在Django开发中,经常会出现重复的代码块,这些代码不仅增加了代码量,还会降低代码的可读性和可维护性。我们可以通过把这些重复的代码块抽象成单独的函数,来减少代码量,提高代码的可读性和可维护性。 比如,我们可以将下面的示例代码: def create_po…

    Django 2023年5月16日
    00
  • Python后台开发Django的教程详解(启动)

    一、标题 Python后台开发Django的教程详解(启动) 二、正文 简介 Django是一款基于Python的Web开发框架,被广泛应用于网站和应用的开发。本篇文章将介绍如何启动Django项目并进行基本配置。 环境准备 在开始Django项目之前,我们需要进行一些环境准备:- 确保你已经安装了Python。建议使用Python3以上的版本。- 使用pi…

    Django 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部