Django 应用程序 + 模型 + 基本数据访问
如果你只是建造一个简单的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 应用程序 + 模型 + 基本数据访问相关推荐
- django settings 定义的变量不存在_使用Django部署机器学习模型(1)
介绍 机器学习(ML)应用的需求正在不断增长.许多资料显示了如何训练ML算法.然而,ML算法分为两个阶段: 训练阶段--在这个阶段,基于历史数据训练ML算法, 推理阶段--ML算法被用于计算对未知结果 ...
- Django框架MVT模型工作流程
Django 一.Django介绍 Django是一个开源的Web应用框架,由Python写成.采用了MTV的框架模式,它最初是被用来做CMS(内容管理系统)软件. 使用Django,程序员可以方便. ...
- Django教程:第一个Django应用程序(1部分)
2019独角兽企业重金招聘Python工程师标准>>> Django教程:第一个Django应用程序(1部分) 请看实例.本教程中将创建一个基本的投票应用. 它由两部分组成:查看投票 ...
- 很棒的 Django 应用程序、项目和资源的精选表单
目录 管理界面 分析 资产管理 验证 授权 博客管理 样板 缓存 兼容性 客户关系管理 仪表盘 数据科学 数据库 调试 电子邮件 字段 文件传输 形式 地理信息系统 图像处理 进出口 迁移 移动支持 ...
- 如何在CentOS 7上使用uWSGI和Nginx来运行Django应用程序
@(tigerfive)[tigerfive][linux学习笔记][uwsgi][django][nginx] 前言 先决条件和目标 安装和配置VirtualEnv和VirtualEnvWrappe ...
- python django部署docker_如何Docker化Python Django应用程序
Docker是一个开源项目,为开发人员和系统管理员提供了一个开放平台,可以将应用程序构建.打包为一个轻量级容器,并在任何地方运行.Docker 会在软件容器中自动部署应用程序. Django 是一个用 ...
- Django框架(10.Django中的模型类的定义以及模型类字段属性和选项)
Django中的模型类的定义以及模型类字段属性和选项 1.模型类的定义 2.模型类属性命名限制 2.1字段类型和属性 2.2选项 1.模型类的定义 ORM:表就代表类,字段代表属性 模型类需要继承自m ...
- docker容器化python开发环境_如何 Docker 化 Python Django 应用程序
Docker 是一个开源项目,为开发人员和系统管理员提供了一个开放平台,可以将应用程序构建.打包为一个轻量级容器,并在任何地方运行.Docker 会在软件容器中自动部署应用程序. Django 是一个 ...
- Silverlight:应用程序模型
Silverlight 应用程序模型提供以下功能来供托管应用程序使用: 一个激活系统,它使得 Silverlight 插件能够下载您的应用程序在启动时需 要的应用程序包和任何外部库程序集. Appli ...
最新文章
- 在Ubuntu 14.04 64bit上安装Valgrind并检查内存泄露
- Jquery循环截取字符串(多出的字符串处理成...)
- 移动网络安全不容忽视 对恶意程序打好防范补丁
- Tensorlfow2.0 二分类和多分类focal loss实现和在文本分类任务效果评估
- C语言程序设计 数组,结构体和指针练习题
- Rectangle 属性
- JavaScript数据类型之比较运算符(8)
- 【浙江大学PAT真题练习乙级】1001 害死人不偿命的(3n+1)猜想(15分)真题解析
- 光影魔术手的抠图功能
- 按照计算机系统结构分类存储器可分为,存储器分类,存储器的分级结构
- java后端要会写前端吗_后端开发有必要学习前端吗,如何入门呢
- 路由器 telnet配置
- 论文阅读:SPR:Supervised Personalized Ranking Based on Prior Knowledge for Recommendation
- 一统大数据江湖,趣话图说“存算分离”武学心法
- android 检测 Home 键
- js图片截图粘贴和上传
- Nexus 搭建docker本地仓库(hosted)和私有仓库(proxy)
- 西门子S7-200 Smart PLC下载
- 重定向和请求转发的区别
- 网络访问之——HTTP
热门文章
- 习惯 积累 沉淀
- [转]RFC 2866 RADIUS Accounting -中文翻译
- freemarker的测试结果框架_TestNG框架Listener介绍及测试结果的收集
- 模拟点击与鼠标点击区别_没有root权限也可以用adb玩机2——模拟按键点击脚本...
- stay hungry stay foolish原文_弟子规原文+译文+注释
- HTML+CSS+JavaScript复习笔记持更(三)——表单篇
- 服务器上有图片但是app不显示不出来,网络app图片显示不出来的
- 小型数控雕刻机制作Arduino_开一家全屋定制装修公司,怎么选择开料机与雕刻机?...
- centos将某一目录权限给用户_CentOS账号和权限的管理,指定用户目录权限
- 嘉宾及议程速览,第四范式2021发布会进入一周倒计时