当前位置: 首页>编程语言>正文

python运行django项目在本地 django forms.py

1、Django中的 forms 模块
  • 1、forms 模块的作用
  • 通过 forms 模块,允许将表单控件与python文件相结合
  • 2、使用 forms 模块
  • ①创建 forms.py 文件
  • ②导入 forms 模块
  • ③创建class,一个class对应一个表单,所有class需要继承自forms.Form
  • ④在class中创建属性,一个属性对应一个表单控件
  • 参考文档(Forms)
  • 在Django中,HttpRequest被演变成了request封装到视图(views)处理函数中的作为参数,该参数,在调用视图处理函数时自动传参
# forms.py
from django import forms

TOPIC_CHOICES = (
    # <option value='level1' >1星</option>
    ('level1', "1星"),
    ('level2', "2星"),
    ('level3', "3星"),
    ('level4', "4星"),
    ('level5', "5星"),
)

class RemarkForm(forms.Form):
    # 创建subject 属性,对应生产一个文本框
    # label:控件提示的文本
    # initial: 控件的初始值
    subject = forms.CharField(label='标题', initial='初始数据')

    # 创建email属性,对应生产一个邮件框
    email = forms.EmailField(label='邮件')

    # 创建一个多行文本域
    # widget 取值为 forms.Textarea 则变成多行文本域
    message = forms.CharField(label='内容', widget=forms.Textarea)

    # 创建一个下拉列表
    # choices:指定下拉列表的选项,取值为一个元组
    topic = forms.ChoiceField(label='评价', choices=TOPIC_CHOICES)

    # 创建复选框
    save = forms.BooleanField(label='是否保存')

# views.py
from django.shortcuts import render
from django.http import HttpResponse

from .forms import *

def remark_views(request):
    form = RemarkForm()
    return render(request, 'remark.html', locals())

# urls.py
from django.conf.urls import url
from django.contrib import admin

from .views import *

urlpatterns = [
    url(r'^remark/$', remark_views, name='remark'),
]
  • 3、在模板中解析form表单
  • ①需要手动添加<form> </form>
  • ②需要手动自定义提交按钮<p><input type=“submit” value=“提交”></p>
  • ③处理方法可选手动解析和自动解析
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <form action="{% url 'remark' %}" method="post">
    {% csrf_token %}
    <!--手动解析生成表单控件-->
    {% for field in form %}
        <p>{{ field.label }}:{{ field }}</p>
    {% endfor %}
    <p><input type="submit" value="提交"></p>
    </form>

	<form action="{% url 'remark' %}" method="post">
	{% csrf_token %}
	<!--自动解析生成表单控件-->
    	{{ form.as_p }}  
	</form>
	<!--{{ form.as_p }}中p表示p标签-->
	<!--{{ form.as_ul }}中ul表示ul标签,需要自定义ul-->
	<!--{{ form.as_table }}中table表示table标签,需要自定义table-->
</body>
</html>
  • 4、在html中提交的扁担内容也可以传递给forms.Form
  • ① 将post中的数据放在EntryForm中
  • ② 判断当前数据是否通过验证,此步骤必须验证
  • ③ 获取到提交的数据,并封装到一个字典中
  • ④ 获取到提交的表单控件数据
# views.py
from django.shortcuts import render
from django.http import HttpResponse

from .forms import *
from .modles import *

def remark_views(request):
    if request.method == 'GET':
        form = RemarkForm()
        return render(request, 'remark.html', locals())
    else:
        # 接收提交的数据
        form = RemarkForm(request.POST) # 将post中的数据放在RemarkForm中
        if form.is_valid():   # 判断当前数据是否通过验证
            data = form.cleaned_data  # 获取到提交的数据,并封装到data中
            # 获取到提交的表单控件数据。subject、email等是RemarkForm中的属性名
            subject = data['subject']
            email = data['email']
            message = data['message']
            topic = data['topic']
            Entry(**data).save()  # 保存到数据库
        return HttpResponse(subject + email + message + topic)
  • 5、forms 模块的高级处理
  • 将Models 和 Forms 结合到一起使用,通过Models自动生成表单
  • ① 创建 class EntryForm,并继承自forms.ModelForm
  • ② 创建内部类 Meta ,并定义相关信息
  • model:指定相关联的models
  • fields :
  • 指定一个列表, 声明允许生成表单控件的属性
  • ‘_ all _’,表示全部属性允许被生成表单控件
  • labels:取值为字典,{‘属性名’:‘显示文本’}
# models.py
from django.db import models

class User(models.Model):
    uname = models.CharField(max_length=30, verbose_name='用户名')
    upwd = models.CharField(max_length=50, verbose_name='用户密码')
    uage = models.IntegerField(verbose_name='用户年龄')
    uemail = models.EmailField(verbose_name='用户邮箱')

# forms.py
from django import forms
from .models import *

class UserForm(forms.ModelForm):
    class Meta:
        model = User # 表单控件关联到 User 的 Models类上
        fields = '__all__' # User 中的所有字段均生成表单控件
        # fields = ['uname', 'uage'] 部分字段生成表单控件
        labels = {
            'uname':'用户名',  # uname= forms.CharField(label='用户名')
            'upwd':'用户密码',
            'uage':'用户年龄',
            'uemail':'用户邮箱',
        }
  • 6、forms 模块的小部件
  • ① 什么是小部件
  • 生成到网页上的控件类型
  • ② 常用的小部件
  • TextInput:<input type=“text” >
  • NumberInput:<input type=“number” >
  • EmailInput:<input type=“email” >
  • URLInput:<input type=“url” >
  • PasswordInput:<input type=“password” >
  • HiddenInput:<input type=“hidden” >
  • CheckboxInput:<input type=“checkbox” >
  • Textarea:<textarea></textarea>
  • Select:<select></select>
  • ③ 小部件的使用:
  • 继承自forms.Form
  • 继承自forms.ModelForm
# forms.py
from django import forms
from .models import *

# 继承自forms.Form 使用小部件方式
class RemarkForm(forms.Form):
    # 创建一个多行文本域
    # widget 取值为 forms.Textarea 则变成多行文本域
    message = forms.CharField(
        label='内容',
        widget=forms.Textarea(
            attrs={
                'class':'form-control',  # 在此控件中增加 class 等属性
                'placeholder': '请输入内容'
	        }
	    )
	)

# 继承自forms.ModelForm 使用小部件方式
class UserForm(forms.ModelForm):
    class Meta:
        model = User # 表单控件关联到 User 的 Models类上
        fields = '__all__' # User 中的所有字段均生成表单控件
        labels = {
            'uname':'用户名',  # uname= forms.CharField(label='用户名')
            'upwd':'用户密码',
            'uage':'用户年龄',
            'uemail':'用户邮箱',
        }
        widgets = {
            'uname': forms.TextInput(attrs={
                'class': 'form-control',    # 在此控件中增加 class 等属性
                'palceholder': '请输入用户名'
            }),
            'upwd': forms.PasswordInput(),
            'uage': forms.NumberInput(),
            'uemail': forms.EmailInput(),
        }



https://www.xamrdz.com/lan/5yk1959808.html

相关文章: