title: Django-表单处理
copyright: true
top: 0
date: 2019-07-08 21:56:35
tags:
categories: WEB 后端框架
permalink:
password:
keywords:
description: 使用Django处理表单内容,非常贴心
这个世界像是蒙着一层白雾,看不清这个世界也看不见自己,只是感觉到脚下还踩着坚实的土地,由此证明自己还活着,除了自己一无所有。
使用表单
以前提交表单内容数据都是在HTML中写一个表单,然后发送到后端,后端进行处理。
但是在Django中变得简单明了,首先在应用的目录下新建一个forms.py
# NHDZ/app/forms.py
# coding:utf-8
from django import forms
import datetime
class Login(forms.Form):
username = forms.CharField(label='用户名', widget=forms.TextInput, initial='admin', label_suffix=':x:',required=True)
# 这里设置表单传送过来的数据,并且自动在前端生成表单
# label 表单的前缀显示 '用户名:'
# widget 类型为text
# initial 输入框内的默认值 为 admin
# label_suffix 后缀,默认是 用户名: 现在变成了 用户名:x:
# required 给字段添加必填属性,不能空着。
password = forms.CharField(label='密码', widget=forms.PasswordInput, initial=datetime.date.today(),help_text='在这里输入你的密码')
# initial 默认值 可以动态获取日期
# help_text 帮助文档
然后就能在视图中编写登陆部分的功能
# NHDZ/app/login.py
# coding:utf-8
from .froms import Login
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
# 登陆页面
login_form = Login()
# 实例化表单,然后把表单的内容获取后,渲染到html页面
return render(request, 'login.html', {'login_form': login_form})
def login(request):
# 登陆验证
if request.method == 'POST':
do_login = Login(request.POST)
# 实例化传递过来的数据
if do_login.is_valid():
# 判断数据是否合法
username = do_login.cleaned_data['username']
# 这里的 cleaned_data方法可以清洗数据,然后获取数据
passowrd = do_login.cleaned_data['password']
return HttpResponse(username + '<br>' + passowrd)
然后在templates文件夹新建一个login.html文件,内容如下
<form action="{%url 'login_success'%}" , method='POST'>
{% csrf_token %}
{
{login_form}}
<button type="submit">登陆</button>
</form>
最后修改一些路由文件urls.py
# NHDZ/app/urls.py
from django.urls import path
from .views import Index,Add_Images,Add_Texts
from .show import show
from .login import index,login
urlpatterns = [
path('',Index,name='index'),
path('add_texts/',Add_Texts,name='add_texts'),
path('add_images/',Add_Images,name='add_images'),
path('show/<str:user>',show,name='show'),
path('login/',index,name='login'),
path('login_success/',login,name='login_success')
]
这个时候添加功能差不多完成了,访问一下看看是不是生成了表单
点击登陆后,返回结果
自动渲染格式
在演示的login.html中,我只是传入了 { {login_form}} 就自动生成了表单,但是样式还是非常简陋的,这里使用Django提供自带的样式表渲染就可以变得美美哒
- { { form.as_table }} 将表单渲染成一个表格元素,每个输入框作为一个标签
- {
{ form.as_p }} 将表单的每个输入框包裹在一个
标签内 tags
- { { form.as_ul }} 将表单渲染成一个列表元素,每个输入框作为一个
- 标签
注意:你要自己手动编写
和- 标签。
比如我现在把login.html文件修改成这样
<form action="{%url 'login_success'%}" , method='POST'>
{% csrf_token %}
{
{login_form.as_p}}
<button type="submit">登陆</button>
现在前端显示的表的样式就变成酱紫
手动渲染格式
在希望引用bootstrap时候,需要手动渲染每个地方的样式表,可以通过如下方式进行获取到表的内容,然后进行渲染
使用直接获取方式
可以使用 表单.属性 的方式获取到表单的