(二)Django模型类,配置项目INSTALLED_ADDS,模型定义,生成数据移植,移植数据库,表单视图...

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
输入用户名及密码后效果如下:
在这里插入图片描述
这个界面应该是英文的,我的浏览器自动翻译成了中文。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值