今天学习表单视图,开发一个表单提交页面
首先定义表单类:
在APP里面新建一个forms.py 文件
定义一张表单类:
from django.forms import ModelForm
from sales.models import Momtent
class MomentForm(ModelForm):
class Meta:
model =Momtent
fields = '__all__'
修改模型类:
为了用户能在视图中可以枚举选择,
from __future__ import unicode_literals
from django.db import models
#新增元祖用于设置消息类型枚举项
KIND_CHOICES =(
('Python技术','Python技术'),
('数据库技术','数据库技术'),
('经济学','经济学'),
('文体资讯','文体资讯'),
('个人心情','个人心情'),
('其他','其他'),
)
class Momtent(models.Model):
content =models.CharField(max_length=300)
user_name = models.CharField(max_length=20,default='匿名')
kind = models.CharField(max_length=20,choices=KIND_CHOICES,
default=KIND_CHOICES[0])
开发模板文件
<!DOCTYPE html>
<html>
<head>
<title>消息录入页面</title>
</head>
<body>
<form action="?" method="post">
<fieldset>
<legend>请输入并提交</legend>
{{ form.as_p }}
<input type="submit"value="submit" />
</fieldset>
</form>
</body>
</html>
开发视图:
在views.py 中
import os
from django.shortcuts import render
from django.http import HttpResponse
from sales.forms import MomentForm
from django.http import HttpResponseRedirect
from django.urls import reverse # django3.0 中 reverse 在django.urls 里面
def listorders(request):
return HttpResponse("下面是系统中所有的订单信息。。。")
def welcome(request):
return HttpResponse("<h1>Welcome</h1>")
def moments_input(request):
if request.method =="POST":
form = MomentForm(request.POST)
if form.is_valid():
moment = form.save()
moment.save()
#重定向到指定的url
return HttpResponseRedirect(reverse('sales:welcome'))
else:
form = MomentForm()
PROJECT_ROOT =os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
return render(request,os.path.join(PROJECT_ROOT,'sales/templates',"moment_input.html"),{'form':form})
定义url 指向
项目里面的urls.py
urlpatterns = [
path('admin/', admin.site.urls),
#凡是以sales 开头的,会路由到sales里面的url里面
path('sales/',include('sales.urls',namespace='sales')),
path('mgr/',include('mgr.urls')),
]
app应用里面的urls.py
from django.urls import path
from . import views
urlpatterns = [
path('orders/', views.listorders),
path('moments_input',views.moments_input),
path('',views.welcome,name='welcome'),
]
app_name='sales'
注意:这里有一个坑
django3.0 不在APP 的urls.py里面指定app_name,会提示,应用没有注册命名空间('xxxx' is not a registered namespace)