django入门系列 -表单视图

今天学习表单视图,开发一个表单提交页面

首先定义表单类:

在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)

原文地址:https://www.cnblogs.com/Neotester/p/12956570.html