Django模型类
配置项目INSTALLED_ADDS
模型定义
生成数据移植
移植数据库
表单视图
修改模型类
开发模板文件
开发视图
使用管理界面
————————————————————————————
配置项目INSTALLED_ADDS
要在项目的setting.py中告诉Django需要安装应用newapp中的模型,方法:
打开setting.py,找到其中的INSTALLED_APPS数组,添加应用newapp的Config类 。
新增一行 ‘newapp.apps.NewappConfig’,
# Application definition
INSTALLED_APPS = [
'newapp.apps.NewappConfig', #这行是新增加的。newapp是应用的名字,NewappConfig是apps.py文件中的类名,你可以打开看看,这个文件是自动生成的。
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]
#这个代码声明了newapp中的apps.py中自动生成的NewappConfig类。
模型定义
方法:打开newapp/models.py。在其中定义一个模型类Moment用来定义信息发布表。如下:
from django.db import models #引入django.db模块中的类models,所有模型必须继承自它
class Moment(models.Model):
content=models.CharField(max_length=300) #保存消息内容
user_name=models.CharField(max_length=20) #保存发布人名字
kind=models.CharField(max_length=20) #保存消息的类型
生成数据移植文件
生成数据移植文件(makemigrations)是指将上面models.py中定义的数据表转换成数据库生成脚本的过程。方法:
在项目所在的目录下,也就是cd Hello下:
在终端输入 python manage.py makemigrations newapp
出现如下结果:
这样才完成了模型Moment的建立,其中的0001_initial.py是数据库新生成的中间文件存在于新生成的migration文件夹中。如果要改动newapp/models.py文件,那么每次改动完需要重新生成数据移植文件。方法和上面一样python manage.py makemigrations newapp,之后会生成0002_这样的文件。
移植数据库
要是移植的数据生效,需要通过manage.py的migrate命令是修改同步到数据库中。
项目路径下在终端输入 python manage.py migrate
表单视图
接下来的任务是设计和开发信息录入页面,要实现的基本功能为:提供输入界面,让用户输入名字,文本消息内容,选择消息类型,提交后网页自动设置该信息的时间和保存到数据库中
先建立表单,在newapp中创建一个表单类文件Hello/newapp/forms.py,如下:
from django.forms import ModelForm #引入模块,ModelForm是Django表单类的基类
from newapp.models import Moment #引入newapp应用里的文件models.py中定义的类Moment
class MomentForm(ModelForm): #定义表单类MomentForm
class Meta: #在其中定义子类 Meta
model=Moment # 声明与本表单关联的模型类 还有下面的字段
fields='__all__' #导入所有字段,也可以写成fields=('content','user_name','kind')
# Meta中的 fields='__all__' 将所有模型类中的字段导入表单类中
修改模型类
为了使用户能够以单选的方式选择消息类型,需要修改models.py并与模型类Moment相互关联。我是这样修改的:
打开Hllow/newapp/models.py文件修改如下:
# -*- coding:utf-8 -*-
from __future__ import unicode_literals
from django.db import models #引入django.db模块中的类models,所有模型必须继承自它
#新增元组用于设置消息类型枚举项
KIND_CHOICES=(
('python技术','python技术'),
('数据库技术','数据库技术'),
('经济学','经济学'),
('文体咨询','文体咨询'),
('个人心情','个人心情'),
('其他','其他'),
)
# Create your models here.
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]) #保存消息的类型
因为本次编辑导致模块层发生变化,所有需要更新数据库的定义,重复一编:
#在项目路径的终端输入:
python manage.py makemigrations newapp #生成数据移植文件
python manage.py migrate #移植数据库
这样就完成了模块的数据更新。
开发模板文件
就是建立html文件
先在Hello/newapp/应用下建立一个文件夹templates
然后在Hello/newapp/templates中建立模板文件moment_input.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>
#根据{{ form }},所有的表单字段和它们的属性将通过Django 的模板语言拆分成HTML 标记 。
#注:Django 原生支持一个简单易用的跨站请求伪造的防护。当提交一个启用CSRF 防护的POST 表单时,你必须使用上面例子中的csrf_token 模板标签。
#现在我们有了一个可以工作的网页表单,它通过Django Form 描述、通过视图处理并渲染成一个HTML <form>。
对于
开发视图
开发视图函数,使得表单类和页面模板衔接起来
打开Hello/newapp/views.py文件,需要加入一些函数
加入之后的views.py文件如下:
from django.http import HttpResponse #建立一个路由响应函数
import os
from newapp.forms import MomentForm
from django.http import HttpResponseRedirect
from django.urls import reverse
from django.shortcuts import render
def moments_input(request):
if request.method=='post':
form=MomentForm(request.post) #这叫做”绑定数据至表单“
if form.is_valid(): #我们调用表单的is_valid()方法
moment=form.save()
moment.save()
return HttpResponseRedirect(reverse("newapp.views.welcome"))
else:
form=MomentForm()
PROJECT_ROOT=os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
return render(request,os.path.join(PROJECT_ROOT,'newapp/templates','moments_input.html'),{'form':form})
def welcome(request): #定义一个名叫welcome的函数
return HttpResponse("<h1>欢迎来到我的空间</h1>") #调用函数返回在页面显示的内容
在Hello/newapp/url_1.py文件中增加该视图函数的路由映射
改后如下:
from django.conf.urls import url #调用django.conf.urls中的url()函数
from . import views #从当前文件中中调用views
urlpatterns=[
url(r'moments_input',views.moments_input),
url(r'',views.welcome)
] #定义关键变量为一个列表,用来保存url()函数生成的理由映射,把所有路由映射到views.py中的welcome函数
打开网址: http://192.168.0.100:8001/newapp/moments_input
访问效果如下:
使用管理界面
Django管理界面是给系统管理员用的,以完成元数据的输入,删除,查询等工作
首先将管理界面需要管理的模型类添加到Hello/newapp/admin.py文件中
from django.contrib import admin
from .models import Moment
admin.site.register(Moment) #admin.site.register() 函数逐个声明要管理的模型类即可。
第一次访问管理界面需要通过manage.py工具的createsuperuser命令来建立管理员用户,过程中按照提示输入用户名,邮箱,密码
在项目路径的终端输入:
python manage.py createsuperuser
效果如下:
注意:输入密码的时候不会显示你输入的是什么,直接输入完回车就可以了,要输入两遍。
访问管理员界面 http://192.168.0.100:8001/admin
输入用户名及密码后效果如下:
这个界面应该是英文的,我的浏览器自动翻译成了中文。