上一节认识了Django站点的简单建立,但并未涉及到Model层的处理,本篇将设计一个简单模型类以及表单视图
模型类
1.配置项目INSTALLED_APPS
在DTFT_D/settings.py中添加应用Django_app的名字(py2.x中需要填写成Django_app.apps.AppConfig)
INSTALLED_APPS = [
'Django_app',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
2.模型定义
在models.py中新建一个模型类Moment
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
class Moment(models.Model):
content = models.CharField(max_length=300)
user_name = models.CharField(max_length=20)
kind = models.CharField(max_length=20) #单选框
3.生成数据移植文件(将models.py中定义的数据表转换成数据库脚本)
python manage.py makemigrations Django_app
4.移植到数据库(使移植文件生效、修改真实的数据库schema)
python manage.py migrate
注意:可以在每次修改models.py文件后运行makemigrations,检查改动是否符合数据库语法;在调试运行前,运行migrate使改动生效
扫描二维码关注公众号,回复:
2458191 查看本文章
表单视图
1.定义表单类,在DTFT_D/Django_app下新建forms.py,定义表单类MomentForm
# -*- coding: utf-8 -*-
__author__ = 'leeho'
from django.forms import ModelForm
from Django_app.models import Moment
class MomentForm(ModelForm):
class Meta:
model = Moment
fields = '__all__' #可写成fields=('content','user_name','kind') 将模型类中的字段导入表单类中
2.修改模型类
# -*- coding: utf-8 -*-
from __future__ import unicode_literals
from django.db import models
#定义一个元组设置消息类型枚举项(key-value)
KIND_CHOICES = (
('Python技术','Python技术'),
('数据库','数据库'),
('心理学','心理学'),
('经济学','经济学'),
('其他','其他'),
)
class Moment(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]) #单选框
3.开发模板文件,即HTML/XML,在DTFT_D/Django_app/templates下新建moment_input.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>消息录入界面</title>
</head>
<body>
<form action="?" method="post">
<fieldset>
<legend>请输入并提交</legend>
{{ form.as_p }} #定义表单类MomentForm的输入字段
<input type="submit" value="submit"/>
</fieldset>
</form>
</body>
</html>
4.开发视图,使表单类和页面模板衔接,编辑Django_app/views.py
import os
from django.shortcuts import render,redirect
from django.http import HttpResponse
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from Django_app.forms import MomentForm
# Create your views here.
def welcome(request):
return HttpResponse("<h1>Welcome to my tiny twitter!</h1>")
def moments_input(request):
if request.method == "POST":
form = MomentForm(request.POST)
if form.is_valid():
moment = form.save()
moment.save()
return HttpResponseRedirect(reverse('welcome')) #welcome对应urls中name,reverse类似于通过找welcome再映射视图
else:
form = MomentForm()
PROJECT_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
return render(request, os.path.join(PROJECT_ROOT, 'Django_app/templates', 'moments_input.html'), {'form':form})
在Django_app/urls.py中添加视图函数的路由映射
urlpatterns=[
url(r'moments_input',views.moments_input),
url(r'',views.welcome,name='welcome'),
]
运行截图:
点击submit后跳转到