慕课网-Django入门到进阶-更适合Python小白的系统课程-第5章Django中的Form表单的使用-5-1表单的介绍和一个简单表单的使用方法

第5章 Django 中的 Form 表单的使用

5-1 表单的介绍和一个简单表单的使用方法

什么是表单

1.表单可以和我们日常的填表联想起来,通过集合信息交付给指定的人或位置

2.从 Web 的角度来说,通过前端的表单模块填写后端服务需要的信息,填写完毕后,提交给后端服务的一个工具

3.表单一般分为四个部分:提交地址、提交方法、表单组件、提交按钮

<form action="/" method="get">
<input type="text" />
<input type="submit" value="提交" />
</form>

Form 表单标签 用于定义一个表格 attr: action method

Input 输出标签 用来填写信息

Select - options 选择标签 如名,可以在多个选项中进行选择

input 标记所包含的元素类型

type值 说明
text 文本字段
password 密码域,用户在输入时不显示具体内容,以*代替
radio 单选按钮
checkbox 复选框
button 普通按钮
submit 提交按钮
reset 重置按钮
hidden 隐藏域
file 文件域

前端学习资料推荐

http://www.w3school.com.cn/tags/html_ref_byfunc.asp

请将以上地址中的 html、css、javascript 多看几遍,甚至,多抄几遍,这个笔记本将可能会跟随你技术职业的一生

本课程不会对前端知识做系统讲解,但会在使用到每一个知识点的时候,为大家进行介绍,以便大家快速上手

Django 的表单能做什么

1.模拟生成前端 html 语言,无需手动书写表单

2.对前端提交的表单信息进行验证

建议自己手动去书写前端 html 语言,因为那样会更好控制,如 css 样式等

实例

1.在命令行窗口新建项目

django-admin startproject form
cd form
python manage.py startapp app

2.在项目 form 中目录 form,修改文件 settings.py

# 添加应用
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'app',
]

# 添加模板路径
TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

3.在项目 form 下新建目录 templates

4.在项目 form 下目录 app,添加文件 urls.py,添加应用路由

urlpatterns = [
    
]

5.在项目 form 下目录 form,修改文件 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)),
]

6.在项目 form 下目录 app,修改文件 views.py

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

class Regist(View):
    TEMPLATE = 'regist.html'

    def get(self, request):
        return render(request, self.TEMPLATE)

    def post(self, request):
        pass

7.在项目 form 下目录 app,添加文件 urls.py  

from django.urls import path
from .views import Regist

urlpatterns = [
    path('regist', Regist.as_view(), name='regist'),
]

8.在项目 form 下目录 templates,添加文件 regist.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>regist</title>
</head>
<body>
    <form action="" method="">
        <input type="text" placeholder="用户名" />
        <input type="password" placeholder="密码" />
        <input type="submit" value="提交" />
    </form>
</body>
</html>

9.在项目 form 下命令行窗口启动服务

python manage.py runserver 127.0.0.1:8000

10.测试看效果

11.在项目 form 下目录 templates,修改文件 regist.html 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>regist</title>
</head>
<body>
    <form action="{% url 'regist' %}" method="post">
        <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>

12.在项目 form 下目录 app,修改文件 views.py

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

class Regist(View):
    TEMPLATE = 'regist.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:', username)
        print('password', password)
        return redirect('/regist')

13.测试,提示错误

14.在项目 form 下目录 templates,修改文件 regist.html,添加 csrf_token

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>regist</title>
</head>
<body>
    <form action="{% url 'regist' %}" method="post">
        {% csrf_token %}
        <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>

15.再次测试,成功了

16.在项目 form 下目录 app,添加文件 forms.py

from django import forms
from django.forms import fields

class Auth(forms.Form):
    username = fields.CharField(max_length=18, required=True)
    password = fields.CharField(widget=forms.PasswordInput)

17.在项目 form 下目录 app,修改文件 views.py

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

class Regist(View):
    TEMPLATE = 'regist.html'

    def get(self, request):
        form = Auth()
        return render(request, self.TEMPLATE, {'form': form})

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

18.在项目 form 下目录 templates,修改文件 regist.html,调用 form  

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>regist</title>
</head>
<body>
    <form action="{% url 'regist' %}" method="post">
        {% csrf_token %}
        {{form.as_table}}
<!--        <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>

19.测试

20.在项目 form 下目录 app,修改文件 views.py,调用 form

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

class Regist(View):
    TEMPLATE = 'regist.html'

    def get(self, request):
        form = Auth()
        return render(request, self.TEMPLATE, {'form': form})

    def post(self, request):
        # username = request.POST.get('username')
        # password = request.POST.get('password')
        form = Auth(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('/regist')

 

posted on 2020-02-05 09:01  herisson_pan  阅读(7)  评论(0)    收藏  举报

导航