当前位置: 首页 > news >正文

Django项目开发举例举例之创建应用模型(2)

         应用是一个Web应用程序,它完成具体的事项 —— 比如一个博客系统、一个存储公共档案的数据库或者一个简单的投票应用。

应用可以放在Python path上的任何位置。在本教程中,我们将放在与manage.py文件同级目录下,以便可以将它作为顶层模块导入,

而不是testproject的子模块。我们以创建一个投票系统为例来创建一个应用。

现在我们切换到与manage.py文件同级目录下

1.创建应用

$ python manage.py startapp myapp


我们可以看一下执行命令后增加了哪些目录文件:

$ ls -la

total 80

drwxr-xr-x   6 chenqianqian  staff    204  4 17 17:39 .

drwxr-xr-x+ 41 chenqianqian  staff   1394  4 17 17:24 ..

-rw-r--r--   1 chenqianqian  staff  36864  4 17 17:33 db.sqlite3

-rwxr-xr-x   1 chenqianqian  staff    809  4 17 17:24 manage.py

drwxr-xr-x   9 chenqianqian  staff    306  4 17 17:39myapp

drwxr-xr-x   7 chenqianqian  staff    238  4 17 17:33 testproject


$ cd myapp/

$ ls -la

total 40

drwxr-xr-x  9 chenqianqian  staff  306  4 17 17:39 .

drwxr-xr-x  6 chenqianqian  staff  204  4 17 17:39 ..

-rw-r--r--  1 chenqianqian  staff    0  4 17 17:39 __init__.py

-rw-r--r--  1 chenqianqian  staff   63  4 17 17:39 admin.py

-rw-r--r--  1 chenqianqian  staff   85  4 17 17:39 apps.py

drwxr-xr-x  3 chenqianqian  staff  102  4 17 17:39 migrations

-rw-r--r--  1 chenqianqian  staff   57  4 17 17:39 models.py

-rw-r--r--  1 chenqianqian  staff   60  4 17 17:39 tests.py

-rw-r--r--  1 chenqianqian  staff   63  4 17 17:39 views.py


2.创建数据模型

定义模型即定义该模型所对应的数据库设计及其附带的元数据。在这个简单的投票应用中,我们将创建两个模型: QuestionChoiceQuestion对象具有一个question_text(问题)属性和一个publish_date(发布时间)属性。 Choice有两个字段:选择的内容和选择的得票统计。 每个Choice与一个Question关联。

编辑models.py 文件:

$ vi models.py 

$ more models.py 

from django.db import models


# Create your models here.


class Question(models.Model):

    question_text=models.CharField(max_length=200)

    pub_date=models.DateTimeField('data publlish')


class Choice(models.Model):

    question=models.ForeignKey(Question)

    choice_text=models.CharField(max_length=200)

    vote=models.IntegerField(default=0)

       上述代码非常直观。每个模型都用一个类表示,该类继承自django.db.models.Model每个模型都有一些类变量,在模型中每个类变量都代表了数据库中的一个字段。注意我们使用ForeignKey定义了一个关联。它告诉Django每个Choice都只关联一个Question


3.激活模型

编辑testproject/settings.py文件,并修改INSTALLED_APPS设置以包含字符串'myapp':

# Application definition


INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

   'myapp',

]

让Django知道要包含myapp应用。 让我们运行另外一个命令:

$ python manage.py makemigrations myapp

通过运行makemigrations告诉Django,已经对模型做了一些更改(在这个例子中,你创建了一个新的模型)并且会将这些更改存储为迁移文件

这些文件存储在myapp/migrations下,我们可以通过以下命令来查看迁移行为所执行的SQL语句:

$ python manage.py sqlmigrate myapp 0001

如果有兴趣,你还可以运行python manage.py check它会检查你的项目中的模型是否存在问题,而不用执行迁移或者操作数据库。


由于我们新增了一些模型,所以需要我们执行下面命令创建相应的数据库表:

$ python manage.py migrate

结论:当我们创建应用模型时需要进行三个步骤--编辑models.py文件,运行python manage.py makemigrations命令,运行python manage.py migrate命令


4.进一步丰富models.py文件

我们可以根据应用的需要向models.py文件中增加函数的定义

#--------------------------------------------------------------------
import datetime
from django.db import models
from django.utils import timezone

# Create your models here.

class Question(models.Model):
    question_text=models.CharField(max_length=200)
    pub_date=models.DateTimeField('data publlish')

    def _str_(self):
        return self.question_text

    def was_published_recently(self):
        return self.pub_date>=timezone.now-datetime.timedelta(days=1)

class Choice(models.Model):
    question=models.ForeignKey(Question)
    choice_text=models.CharField(max_length=200)
    vote=models.IntegerField(default=0)

    def _str_(self):
        return self.choice_text
#------------------------------------------------------------------------









相关文章:

  • Django项目开发举例之应用的管理界面(3)
  • Django项目开发举例之自定义管理界面(4)
  • Django项目开发举例之用户界面视图模版(5)
  • Django项目开发举例之用户界面表单(6)
  • Django中Meta类详解
  • No python interpreter configured for the project
  • Django中各文件常用参数详解
  • Django-xadmin的使用
  • Linux定时任务Crontab命令详解
  • Oracle随机抽取数据
  • ORACLE输出结果到文件
  • 解决sqlplus中输错命令时的删除、光标键不能使用问题
  • BETWEEN AND的边界值问题
  • ORACLE数据库已知当前日期求上月5号和当月5号
  • ORACLE定时任务举例
  • [译] 怎样写一个基础的编译器
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • Android组件 - 收藏集 - 掘金
  • AWS实战 - 利用IAM对S3做访问控制
  • CentOS7 安装JDK
  • co模块的前端实现
  • docker容器内的网络抓包
  • es6(二):字符串的扩展
  • gcc介绍及安装
  • HTML中设置input等文本框为不可操作
  • JavaScript 奇技淫巧
  • JavaScript 事件——“事件类型”中“HTML5事件”的注意要点
  • JavaScript/HTML5图表开发工具JavaScript Charts v3.19.6发布【附下载】
  • Laravel 中的一个后期静态绑定
  • Mac转Windows的拯救指南
  • npx命令介绍
  • SpiderData 2019年2月25日 DApp数据排行榜
  • Sublime Text 2/3 绑定Eclipse快捷键
  • WinRAR存在严重的安全漏洞影响5亿用户
  • 初识 webpack
  • 前端之Sass/Scss实战笔记
  • 如何使用 JavaScript 解析 URL
  • 学习ES6 变量的解构赋值
  • 最简单的无缝轮播
  • 智能情侣枕Pillow Talk,倾听彼此的心跳
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (31)对象的克隆
  • (C#)一个最简单的链表类
  • (Python第六天)文件处理
  • (二)PySpark3:SparkSQL编程
  • (六)vue-router+UI组件库
  • (六)激光线扫描-三维重建
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (一)SpringBoot3---尚硅谷总结
  • (转)Linux整合apache和tomcat构建Web服务器
  • .\OBJ\test1.axf: Error: L6230W: Ignoring --entry command. Cannot find argumen 'Reset_Handler'
  • .form文件_SSM框架文件上传篇
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions