Django学习Day13——表单的使用(一)

Django中表单的使用

之前的12篇博客,我们介绍了Django中最为重要的MVT开发模式,包括模型层(Model)、视图层(View)和模板层(Template) ,这篇博客我们继续学习Django中一个比较重要的知识点:表单。表单在系统开发中的使用十分广泛,比如基础的注册功能、登录功能都离不开表单。

表单的定义

宏观定义表单可以和我们日常生活中填写纸质表格联系起来,即通过集合信息交付给指定的人或位置。

Web开发中的定义从web开发的角度来说,通过前端的表单模块填写后端服务需要的信息 填写完毕后,提交给后端服务的一个工具。

表单一般分为四个部分:提交地址提交方法表单组件提交按钮。如下所示是一个典型的表单内容:

<form action="/register" method="POST">
    <input type="text" value="用户名" />
    <input type="submit" value="提交" />
</form>
  • form:表单标签,用于定义一个表格。action属性指定提交地址,即form表单的内容提交到的后端服务位置;method属性指定提交的方法。
  • input:输入标签,用来填写内容。

  • select:选择标签,可以在多个选项中进行选择。

上面的代码展示在前端界面如下:

在Django项目中使用表单,有两种方式:

  1. 自己实现HTML代码,设计前端页面,然后和后端进行交互。
  2. 使用Django中的表单,用Python代码实现表单,无需书写HTML代码。

一般在实际应用开发过程中,我们选择第一种方式,这样的实现方式对于前端的可控性更强。

HTML代码实现表单

首先介绍如何使用HTML实现表单,并且和后端进行交互。

1、创建项目,完成应用注册和模版文件路径设置。

2、编写视图函数,实现get方法(展示前端界面)和post方法(接收表单输入)。

app/views.py:

from django.shortcuts import render, redirect
from django.views.generic import View

class Register(View):
    TEMPLATE = 'register.html'
    def get(self, request):

        return render(request, self.TEMPLATE)

    def post(self, request):
        username = request.POST.get('username')
        password = request.POST.get('password')
        print(username)
        print(password)
        return redirect('/register')

3、实现前端页面。

templates/register.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Register</title>
</head>
<body>
<!--action属性定义提交地址-->
<!--method属性定义表单提交方法,一般来讲都是POST方法-->
<!--<form action="/register" method="POST">-->
<!--在定义提交地址的时候,推荐使用{% url url_name %}的方式,因为我们的URL可能会变化,但是只要名称不变,就不会影响到之前写的代码-->
<form action="{% url 'register' %}" method="POST">

    {% csrf_token %}
    <!--name属性定义该标签的名称,之后在后端可以通过request.POST.get('username')的方式获取得到-->
    <!--placeholder属性定义该标签在前端页面的显示内容-->
    <label>用户名</label><input type="text" name="username" placeholder="用户名"/><br/>
    <label>密码</label><input type="password" name="password" placeholder="密码"/><br/>
    <input type="submit" value="提交" />
</form>
</body>
</html>

4、配置路由

app/urls.py:

from django.urls import path
from .views import Register
urlpatterns = [
    path('register', Register.as_view(), name='register')
]

 five/urls.py:

from django.contrib import admin
from django.urls import path, include
from app import urls as app_urls
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include(app_urls))
]

5、启动服务,在浏览器中进行访问。

 

输入用户名和密码之后,点击提交按钮,可以在后端获取我们输入的数据:

在表单提交过程中,需要在表单中设置跨域提交,否则会出现如下的错误:

Python代码实现表单

下面介绍如何使用Django中自带的表单模块,使用Django中自带的表单模块,可以直接使用Python代码实现对表单的定义,不必书写HTML代码。

1、创建定义表单的Python文件(app/forms.py)

from django import forms
from django.forms import fields

class RegisterForm(forms.Form):
    # max_length属性设置输入用户名的最大长度
    # required = True表示不能为空
    username = fields.CharField(max_length=20, required=True)
    password = fields.CharField(widget=forms.PasswordInput)

2、创建前端代码文件(templates/registerForm.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="{% url 'register' %}" method="post">
    {% csrf_token %}
    {{form.as_table}}
    <input type="submit" value="提交">
</form>
</body>
</html>

3、实现视图函数(app/views.py)

from django.shortcuts import render, redirect
from django.views.generic import View
from .forms import RegisterForm

class Register(View):
    TEMPLATE = 'registerForm.html'
    def get(self, request):
        form = RegisterForm()
        return render(request, self.TEMPLATE, {'form':form})

    def post(self, request):
        # 两种方法均可
        # 方法一
        # username = request.POST.get('username')
        # password = request.POST.get('password')
        # print(username)
        # print(password)
        # return redirect('/register')

        # 方法二
        form = RegisterForm(request.POST)
        if form.is_valid():
            username = form.cleaned_data.get('username')
            password = form.cleaned_data.get('password')
            print('username: ', username)
            print('password: ', password)
            return redirect('/register')

4、启动服务,进行访问

 

参考资料

https://coding.imooc.com/class/393.html

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值