如果你只是建造一个简单的web站点,那么可能你只需要一个app就可以了。如果是复杂的象 电子商务之类的Web站点,你可能需要把这些功能划分成不同的app,以便以后重用。

确实,你还可以不用创建app,例如以前写的视图,只是简单的放在 views.py ,不需要app。

当然,系统对app有一个约定:如果你使用了Django的数据库层(模型),你 必须创建一个django app。模型必须在这个app中存在。因此,为了开始建造 我们的模型,我们必须创建一个新的app。

转到 mysite 项目目录,执行下面的命令来创建一个新app叫做books:

python manage.py startapp books

在Python代码里定义模型

我们早些时候谈到。MTV里的M代表模型。Django模型是用Python代码形式表述的数据在数据库中的定义。对数据层来说它等同于 CREATE TABLE 语句,只不过执行的是Python代码而不是SQL,而且还包含了比数据库字段定义更多的含义。Django用模型在后台执行SQL代码并把结果用Python的数据结构来描述,这样你可以很方便的使用这些数据。

最后,我们要提醒你Django提供了实用工具来从现有的数据库表中自动扫描生成模型。 这对已有的数据库来说是非常快捷有用的。

在设置完setting.py的内容之后(详见https://blog.csdn.net/anualday/article/details/52639205),现在我们可以创建数据库表了。首先,用下面的命令对校验模型的有效性:

python manage.py check

validate 命令检查你的模型的语法和逻辑是否正确。如果一切正常,你会看到 0 errors found 消息。如果有问题,它会给出非常有用的错误信息来帮助你 修正你的模型。

一旦你觉得你的模型可能有问题,运行 python manage.py validate 。 它可以帮助你捕获一些常见的模型定义错误。

模型确认没问题了,运行下面的命令来生成 CREATE TABLE 语句:

python manage.py sqlall books

模型安装(掺杂django1*与2*的区别,区别很大):

很多人读了Django老版本的书籍,却安装了比较新的Django,以至于在使用数据库时出了很多头疼的问题,我也不例外,不想再让别人继续被折磨了。现将本人遇到的一些问题以及解决的办法整理如下:(我的环境是Linux终端)

一、 数据库的配置(可以省略,用sqlite不需要):

1、首先你要保证在终端上安装了数据库(MySQL)。接下来在在里面创建你自己的数据库,比如create database djangodb.

2、cd到你创建工程的目录,我的是username/djcode/website,然后cd 到mysite里,然后vim settings.py,对这个文件中的DATABASES项进行设置,完成后大概是这样的

         DATABASES = {'default': {'ENGINE': 'django.db.backends.mysql','NAME': 'django',#你使用的数据库名字'USER': 'root','PASSWORD':'',  #这里填写你的数据库密码'HOST': 'localhost','PORT':'3306',}}

当你运行python manage.py shell时可能会遇到错误,比如提示你没有mysqldb,那你应该按照Python -easy -install

二、创建模型

还要把你的模型放在settings.py中INSTALLED_APPS。你的模型就是你在工程目录下执行python manage.py startapp books时创建的,名字不一定要叫books。创建完对其进行定义。然后你要激活模型,将 books app添加到配置文件的已安装应用列表中即可完成此步骤。设置完貌似是这样的:

       INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','books',  #不要忘记后面的逗号   这边要重点注意下,这是2*之后的语句,如果是1*的话语句是'website/books'
]

定义并激活了模型,你可能会验证模型是否有效,如果我没说错,你可能会执行python manage.py validate ,然后你会特别伤心的看到人家提示Unknown command: 'validate'Type 'manage.py help' for usage.,对吧?所以你要用如下这个命令:python manage.py check来验证。

然后你还想生成sql语句,你就运行了python manage.py sqlall books,错误提示是Unknown command: 'sqlall'Type 'manage.py help' for usage.同样如果你想提交sql语句到数据库而运行syncdb,错误提示是Unknown command: 'syncdb'
Type 'manage.py help' for usage. 为什么没有这些命令,因为它们被淘汰了。所以你只需运行如下的命令:

  python manage.py makemigrations books    #用来检测数据库变更和生成数据库迁移文件
python manage.py migrate     #用来迁移数据库
python manage.py sqlmigrate books 0001 # 用来把数据库迁移文件转换成数据库语言

在命令行依次执行完这三个命令你就可以进行数据访问了。

因为我曾经被这些问题困扰 ,所以真心希望对看的这篇博客的人有所帮助。

基本数据访问:

>>> from books.models import Publisher
>>> p1 = Publisher(name='Addison-Wesley', address='75 Arlington Street',
...     city='Boston', state_province='MA', country='U.S.A.',
...     website='http://www.apress.com/')
>>> p1.save()
>>> p2 = Publisher(name="O'Reilly", address='10 Fawcett St.',
...     city='Cambridge', state_province='MA', country='U.S.A.',
...     website='http://www.oreilly.com/')
>>> p2.save()
>>> publisher_list = Publisher.objects.all()
>>> publisher_list
[<Publisher: Publisher object(1)>, <Publisher: Publisher object(2)>]

这短短几行代码干了不少的事。这里简单的说一下:

  • 要创建对象,只需 import 相应模型类,并传入每个字段值将其实例化。

  • 调用该对象的 save() 方法,将对象保存到数据库中。Django 会在后台执行一条 INSERT 语句。

  • 使用属性 Publisher.objects 从数据库中获取对象。调用 Publisher.objects.all() 获取数据库中所有的 Publisher 对象。此时,Django 在后台执行一条 SELECT SQL语句。

自然,你肯定想执行更多的Django数据库API试试看,不过,还是让我们先解决一点烦人的小问题。

添加模块的字符串表现

当我们打印整个publisher列表时,我们没有得到想要的有用的信息:

[<Publisher: Publisher object(1)>, <Publisher: Publisher object(2)>]

我们可以简单解决这个问题,只需要添加一个方法 __str__() 到 Publisher 对象。 __str__() 方法告诉Python要怎样把对象当作字符串来使用。在books(models.py)中加入__str__() , 请看下面:

 1 from django.db import models
 2
 3 class Publisher(models.Model):
 4     name = models.CharField(maxlength=30)
 5     address = models.CharField(maxlength=50)
 6     city = models.CharField(maxlength=60)
 7     state_province = models.CharField(maxlength=30)
 8     country = models.CharField(maxlength=50)
 9     website = models.URLField()
10
11     def __str__(self):
12         return self.name
13
14 class Author(models.Model):
15     salutation = models.CharField(maxlength=10)
16     first_name = models.CharField(maxlength=30)
17     last_name = models.CharField(maxlength=40)
18     email = models.EmailField()
19     headshot = models.ImageField(upload_to='/tmp')
20
21     def __str__(self):
22         return '%s %s' % (self.first_name, self.last_name)
23
24 class Book(models.Model):
25     title = models.CharField(maxlength=100)
26     authors = models.ManyToManyField(Author)
27     publisher = models.ForeignKey(Publisher)
28     publication_date = models.DateField()
29
30     def __str__(self):
31         return self.title   #此处需要注意的是在pycharm里面的一个table=4个spaces,而在notepad++里面就不是,需要一样的操作才不会出错

总体思路:先创建一个app文件,然后在文件里面的models.py里面创建模型(建模),之后利用指令来验证模型的有效性,然后在利用指令创建表,然后进入shell,利用python API将模型类实例化,添加数据并保存,数据库中就有相应的格式的数据

转载于:https://www.cnblogs.com/souhaite/p/10770811.html

Django 应用程序 + 模型 + 基本数据访问相关推荐

  1. django settings 定义的变量不存在_使用Django部署机器学习模型(1)

    介绍 机器学习(ML)应用的需求正在不断增长.许多资料显示了如何训练ML算法.然而,ML算法分为两个阶段: 训练阶段--在这个阶段,基于历史数据训练ML算法, 推理阶段--ML算法被用于计算对未知结果 ...

  2. Django框架MVT模型工作流程

    Django 一.Django介绍 Django是一个开源的Web应用框架,由Python写成.采用了MTV的框架模式,它最初是被用来做CMS(内容管理系统)软件. 使用Django,程序员可以方便. ...

  3. Django教程:第一个Django应用程序(1部分)

    2019独角兽企业重金招聘Python工程师标准>>> Django教程:第一个Django应用程序(1部分) 请看实例.本教程中将创建一个基本的投票应用. 它由两部分组成:查看投票 ...

  4. 很棒的 Django 应用程序、项目和资源的精选表单

    目录 管理界面 分析 资产管理 验证 授权 博客管理 样板 缓存 兼容性 客户关系管理 仪表盘 数据科学 数据库 调试 电子邮件 字段 文件传输 形式 地理信息系统 图像处理 进出口 迁移 移动支持 ...

  5. 如何在CentOS 7上使用uWSGI和Nginx来运行Django应用程序

    @(tigerfive)[tigerfive][linux学习笔记][uwsgi][django][nginx] 前言 先决条件和目标 安装和配置VirtualEnv和VirtualEnvWrappe ...

  6. python django部署docker_如何Docker化Python Django应用程序

    Docker是一个开源项目,为开发人员和系统管理员提供了一个开放平台,可以将应用程序构建.打包为一个轻量级容器,并在任何地方运行.Docker 会在软件容器中自动部署应用程序. Django 是一个用 ...

  7. Django框架(10.Django中的模型类的定义以及模型类字段属性和选项)

    Django中的模型类的定义以及模型类字段属性和选项 1.模型类的定义 2.模型类属性命名限制 2.1字段类型和属性 2.2选项 1.模型类的定义 ORM:表就代表类,字段代表属性 模型类需要继承自m ...

  8. docker容器化python开发环境_如何 Docker 化 Python Django 应用程序

    Docker 是一个开源项目,为开发人员和系统管理员提供了一个开放平台,可以将应用程序构建.打包为一个轻量级容器,并在任何地方运行.Docker 会在软件容器中自动部署应用程序. Django 是一个 ...

  9. Silverlight:应用程序模型

    Silverlight 应用程序模型提供以下功能来供托管应用程序使用: 一个激活系统,它使得 Silverlight 插件能够下载您的应用程序在启动时需 要的应用程序包和任何外部库程序集. Appli ...

最新文章

  1. 在Ubuntu 14.04 64bit上安装Valgrind并检查内存泄露
  2. Jquery循环截取字符串(多出的字符串处理成...)
  3. 移动网络安全不容忽视 对恶意程序打好防范补丁
  4. Tensorlfow2.0 二分类和多分类focal loss实现和在文本分类任务效果评估
  5. C语言程序设计 数组,结构体和指针练习题
  6. Rectangle 属性
  7. JavaScript数据类型之比较运算符(8)
  8. 【浙江大学PAT真题练习乙级】1001 害死人不偿命的(3n+1)猜想(15分)真题解析
  9. 光影魔术手的抠图功能
  10. 按照计算机系统结构分类存储器可分为,存储器分类,存储器的分级结构
  11. java后端要会写前端吗_后端开发有必要学习前端吗,如何入门呢
  12. 路由器 telnet配置
  13. 论文阅读:SPR:Supervised Personalized Ranking Based on Prior Knowledge for Recommendation
  14. 一统大数据江湖,趣话图说“存算分离”武学心法
  15. android 检测 Home 键
  16. js图片截图粘贴和上传
  17. Nexus 搭建docker本地仓库(hosted)和私有仓库(proxy)
  18. 西门子S7-200 Smart PLC下载
  19. 重定向和请求转发的区别
  20. 网络访问之——HTTP

热门文章

  1. 习惯 积累 沉淀
  2. [转]RFC 2866 RADIUS Accounting -中文翻译
  3. freemarker的测试结果框架_TestNG框架Listener介绍及测试结果的收集
  4. 模拟点击与鼠标点击区别_没有root权限也可以用adb玩机2——模拟按键点击脚本...
  5. stay hungry stay foolish原文_弟子规原文+译文+注释
  6. HTML+CSS+JavaScript复习笔记持更(三)——表单篇
  7. 服务器上有图片但是app不显示不出来,网络app图片显示不出来的
  8. 小型数控雕刻机制作Arduino_开一家全屋定制装修公司,怎么选择开料机与雕刻机?...
  9. centos将某一目录权限给用户_CentOS账号和权限的管理,指定用户目录权限
  10. 嘉宾及议程速览,第四范式2021发布会进入一周倒计时