在django程序外部使用djangomodels,我给你端示例代码你看看:
fromdjangocoremanagementimportsetup_environ
importQBsettings
setup_environ(QBsettings)
fromrechargemodelsimportOrder,QB是我的project名称,recharge是我的app名称
Model是django项目的基础, 如果一开始没有好好设计好, 那么在接下来的开发过程中就会遇到更多的问题 然而, 大多数的开发人员都容易在缺少思考 的情况下随意的增加或修改model 这样做的后果就是, 在接下来的开发过程中, 我们不得不做出更多努力来修正这些错误
因此, 在修改model时, 一定尽可能的经过充分的考虑再行动! 以下列出的是我们经常用到的一些工具和技巧:
South, 用于数据迁移, 我们会在每个django项目中都用到 但到django 17时, 将会有djangodbmigrations代替
django-model-utils, 用于处理常见的模式, 例如TimeStampedModel
django-extensions, 主要用到shell_plus命令, 该命令会在shell中自动载入所有的app的model
1 基本原则
第一, 将model分布于不同的app中 如果你的django项目中, 有一个app拥有超过20个model, 那么, 你就应当考虑分拆该app了 我们推荐每个app拥 有不超过5个model
第二, 尽量使用ORM 我们需要的大多数数据库索引都能通过Object-Relational-Model实现, 且ORM带给我们许多快捷方式, 例如生成SQL语句, 读取/更新数据库时的安全验证 因此, 如果能使用简单的ORM语句完成的, 应当尽量使用ORM 只有当纯SQL语句极大地简化了ORM语句时, 才使用纯SQL语句 并且, 在写纯SQL语句是, 应当优先考虑使用raw(), 再是extra()
第三, 必要时添加index 添加db_index=True到model中非常简单, 但难的是理解何时应该添加 在建立model时, 我们事先不会添加index, 只有当 以下情况时, 才会考虑添加index:
在所有的数据库查询中使用率在10%-25%时
或当有真实的数据, 或能正确估计出使用index后的效果确实满意时
第四, 注意model的继承 model的继承在django中需要十分小心, django提供了三种继承方式, 1abstract base class继承(不要和Pyhton标准库的abc模块 搞混), 2多表(multi-table)继承, 3proxy model继承 下表罗列了这三种继承的优劣:
django的创造者和其他许多开发人员都认为, 多表继承的方法不是一个良好的方法 因此我们强烈建议大家不要使用该方法 下面列举了一些常见的如何 选择model继承的情形:
如果只有少数model拥有重复的field时, 大可不必使用model继承, 只需要在每个model中添加这些相同的field即可
如果有足够的model拥有重复的field时, 大多是情况下, 可以使用abstract base class继承, 将相同的field提取到abstract base class 中
Proxy model继承很少被用到, 和其他两种继承也有着许多不一样之处
前提条件
1 为 Python 应用程序安装 virtualenv 和 virtualenv wrapper,目的在于为 Python 项目创建独立的环境。
● 安装 pip
sudo apt-get install python-pip
● 安装 virtualenv
sudo pip install virtualenv
● 创建目录以存储您的 virtualenv
mkdir ~/virtualenvs
● 安装 virtualenwrapper
sudo pip install virtualenvwrapper
● 将 WORKON_HOME 设置为您的 virtualenv 目录
导出 WORKON_HOME=~/virtualenvs
● 将 WORKON_HOME 设置为您的 virtualenv 目录
导出 WORKON_HOME=~/virtualenvs
● 将 virtualenvwrappersh 添加到 bashrc
将此行添加到 ~/bashrc 的末尾,以便加载 virtualenvwrapper 命令。/usr/local/bin/virtualenvwrappersh
退出,然后重新打开您的 shell,或者使用 bashrc or source ~/bashrc 命令重新加载 bashrc,然后一切准备就绪。
2 安装 git。
apt-get install git
3 安装 Nginx 作为 Web 服务器,这样您便可在其之后运行您的应用程序。
Sudo apt-get install nginx
启动您的第一个 Linux 实例
接下来向您介绍使用阿里云管理控制台运行 ECS 实例的相关步骤。
1 登录到您的帐户,然后导航到“产品与服务”部分下的“云服务器”。单击侧边栏菜单中的概览。这会显示运行中的实例列表。单击购买实例从任意地域购买实例,或者继续到下一步创建新实例。
2 单击侧边栏菜单中的实例。在实例列表中选择所需地域,然后单击右上方栏中的创建实例。
3 系统会将您重新定向到“产品购买”控制台,在此您需要选择偏好的资源包 - 对 ECS 实例和数据传输提供特殊定价的初级资源包或提供两种定价模式的高级购买资源包。您可以根据自身需求选择订阅(按月或按年)或者按量付费。此案例中,我们选择了“按量付费”。
4 在此窗口中,选择要在其中启动 ECS 实例的数据中心地域和可用性区域。如果选择了地域但未选择可用性区域,系统会将实例随机放在任何区域。
5 现在您需要选择自己想要创建的实例类型。根据自身需求,从“生成”选项卡中选择生成实例类型。生成类型根据配置和所用的计算能力表示不同的实例类型。
6 接下来,选择网络类型以启动您的 ECS 实例。可根据自身需求选择经典网络或专有网络。在经典网络中,阿里云以分布式方式分配 IP 地址。它适合于需要简单快速地使用 ECS 的用户。专有网络更多的是一种逻辑隔离私有网络,它支持专用连接。它适合于熟悉网络管理的用户。选择适当的网络类型后,选择网络计费类型:数据传输或固定带宽。在这两种情况下,您都需要设置网络带宽峰值(最大数据传输速率)。
7 现在,您需要选择 *** 作系统。每个选项下都提供了不同 *** 作系统版本的列表。选择 Ubuntu。
8 根据自身需要,从下拉菜单中选择系统磁盘类型。您还可以通过单击“添加磁盘”向此列表添加更多磁盘。
9 在“安全设置”部分中,您可以创建密码以提高安全性,或者在此阶段跳过此步骤并稍后从管理控制台执行此 *** 作。
10 在“采购计划”部分中,键入您的实例名称并设置要启动的实例的数量。
11 在“概览”部分查看配置详情和总价,然后单击立即购买。
12 单击开通确认业务订单并启动实例。
13 启动实例后,您可以在控制台的实例选项卡中查看该实例。
安装和部署 Django 应用程序
您已使用阿里云管理控制台创建和启动 ECS 实例,接下来让我们了解如何安装和部署 Django 应用程序。
1 使用 ssh 命令登录到您的服务器
2 输入密码
3 通过创建一个新的 virtualenv 为部署 Django 应用程序设置环境:
mkvirtualenv DjangoApp
要退出新的 virtualenv,请使用 deactivate。
您可以使用 workon 在环境之间切换。要加载或在 virtualenv 之间切换,请使用 workon 命令:workon DjangoApp
4 在您的当前环境中安装 Django
pip install Django
5 使用 django-admin 命令创建样本项目并将目录更改为项目文件夹。
django-admin startproject todoApp
cd todoApp/
6 迁移或引导您的数据库。
python managepy migrate
7 创建超级用户以访问管理面板。
python managepy createsuperuser
8 设置用户后,通过运行由 managepy *** 作的 runserver 命令测试您的应用程序
python managepy runserver 0000:8000
您将看到以下内容在端口 8000 上运行
转至 /admin,这是您的管理面板,您可在此管理应用程序。
现在使用 Nginx 将您的应用程序置于 Web 服务器之后。
9 创建数据库架构 开通 python 环境。
● 将目录更改为 Django 项目目录
● 运行以下命令
python managepy migrate
10 收集所有静态文件(css、js 等)
● 运行以下命令以在任意特定位置收集所有静态文件
Python managepy collectstatic --noinput
● 开发人员负责将 STATIC_URL 路径设置为将收集所有静态文件的位置。
● 这些变量在项目目录内的 settingpy 中定义。
1 STATIC_URL
2 STATICFILES_DIRS
3 STATIC_ROOT
11 使用 uwsgi 服务器安装 uwsgi 库并启动服务器。
pip install uWSGI
● 创建用于部署 Django 应用程序的 ini 文件vim uwsgiini
● 将其保存到应用程序目录上的 uwsgiini。如需进一步了解如何编写 ini 文件,请参阅 Python/WSGI 应用程序快速入门。运行此命令以启动您的应用程序。
uwsgi uwsgiini (您的 ini 文件)
12 更改 nginx 配置文件以用于应用程序。
server { listen 80 default_server; listen [::]:80 default_server ipv6only=on; server_name localhost; location /static/ { include uwsgi_params; alias /root/todoApp/public/; } location / { include uwsgi_params; uwsgi_pass unix:/tmp/uwsgisock; } }
13 重启 nginx,随后您的应用程序将启动并在端口 80 上的 nginx 之后运行。
你这个问题描述,着实有点让人费解。感觉你对这方面了解不深,所以一般像你这样的问题很少会有人回答,因为回答之后,你会有更多的疑问,甚至是一直问下去。
在学习的过程中,你要学会自己去搜索解决
Django。如果你看过官方文档的话,查询数据并把列表传到前台。肯定没问题,很简单的几行代码。如果你不会,那就去查看相应版本的django文档。
jquery ajax请求。看下面的示例代码
//这是一个ajax异步请求,使用post方法$ajax({type: "POST",
url: "/message/",
data: {
telnum: $("#telnum")val(),
ordernum: $("#ordernum")val(),
mesgchannel: $("#mesgchannel")val(),
mesglevel: $("#mesglevel")val(),
starttime: $("#datepicker1")val(),
endtime: $("#datepicker2")val()
},
success: function(response){
$('#result')html(response);
}
});
//下面这个是异步请求成功之后,用于接收数据的html标签
<div>
<div id="result" class="alert"></div>
</div>
执行一下这个,可以在你的modelspy表中生成你现有数据库表格的模型
python managepy inspectdb > your_app_name/modelspy
Model是django项目的基础,如果一开始没有好好设计好,那么在接下来的开发过程中就会遇到的问题然而,大多数的开发人员都容易在缺少思考的情况下随意的增加或修改model这样做的后果就是,在接下来的开发过程中,我们不得不做出努力来修正这些错误因此,在修改model时,一定尽可能的经过充分的考虑再行动!以下列出的是我们经常用到的一些工具和技巧:South,用于数据迁移,我们会在每个django项目中都用到但到django17时,将会有djangodbmigrations代替django-model-utils,用于处理常见的模式,例如TimeStampedModeldjango-extensions,主要用到shell_plus命令,该命令会在shell中自动载入所有的app的model1基本原则第一,将model分布于不同的app中如果你的django项目中,有一个app拥有超过20个model,那么,你就应当考虑分拆该app了我们推荐每个app拥有不超过5个model第二,尽量使用ORM我们需要的大多数数据库索引都能通过Object-Relational-Model实现,且ORM带给我们许多快捷方式,例如生成SQL语句,读取/更新数据库时的安全验证因此,如果能使用简单的ORM语句完成的,应当尽量使用ORM只有当纯SQL语句极大地简化了ORM语句时,才使用纯SQL语句并且,在写纯SQL语句是,应当优先考虑使用raw(),再是extra()第三,必要时添加index添加db_index=True到model中非常简单,但难的是理解何时应该添加在建立model时,我们事先不会添加index,只有当以下情况时,才会考虑添加index:在所有的数据库查询中使用率在10%-25%时或当有真实的数据,或能正确估计出使用index后的效果确实满意时第四,注意model的继承model的继承在django中需要十分小心,django提供了三种继承方式,1abstractbaseclass继承(不要和Pyhton标准库的abc模块搞混),2多表(multi-table)继承,3proxymodel继承下表罗列了这三种继承的优劣:model继承类型优势劣势不使用继承,即每个相同的field会重复出现在不同的model中容易明白model和数据表的关系如果有大量相同的field,会较难维护abstractbaseclass继承,即只有继承自该类的model才会有数据表,其自身没有对应的数据表不用在每个model重复编写相同的field也没有多表继承带来的过多消耗无法单独使用其共同的abstractbaseclass多表(multi-table)继承每个model都有数据表,因此可以既使用母表,又使用子表也能通过parentchild从母表访问子表增加了消耗,因为每次查询子表,都会自动查询其母表强烈建议不使用这一方法!proxymodel继承,即只有原始model才会有相应的数据表在不建立新数据表的情况下,使我们拥有不同行为的model无法修改model的fielddjango的创造者和其他许多开发人员都认为,多表继承的方法不是一个良好的方法因此我们强烈建议大家不要使用该方法下面列举了一些常见的如何选择model继承的情形:如果只有少数model拥有重复的field时,大可不必使用model继承,只需要在每个model中添加这些相同的field即可如果有足够的model拥有重复的field时,大多是情况下,可以使用abstractbaseclass继承,将相同的field提取到abstractbaseclass中Proxymodel继承很少被用到,和其他两种继承也有着许多不一样之处请不要使用多表(multi-table)继承,因为它既消耗资源又复杂,如果可以,尽量使用OneToOneFields和ForeignKeys代替django项目中,创建时间和修改时间这两个field是最用到的,下面给出一个abstractbaseclass继承的例子:#modelspyfromdjangodbimportmodelsclassTimeStampedModel(modelsModel):"""abstractbaseclass,提供创建时间和修改时间两个通用的field"""created=modelsDateTimeField(auto_now_add=True)modified=modelsDateTimeField(auto_now=True)classMeta:abstract=True注意以上代码的最后两行,正式这两行将这一model变味了abstractbaseclass,下面以TimeStampedModel为abstractbaseclass建立model:fromdjangodbimportmodelsclassArticle(TimeStampedModel):title=modelsCharField(max_length=200)以上两个class,在执行syncdb时,只会建立一个数据表,这也正是我们希望得到的第五,使用south进行数据迁移,可以参见以前的文章:如何在Django中使用django-south,实现数据迁移(datamigrations)2DjangoModel的设计如何设计出好的djangomodel可能是最难也是最复杂的一个话题了,在此,我们看看一些基本的技巧吧:a规范化我们首先建议了解数据库规范化(databasenormalization)如果你还不清楚这是什么,那么,我们强烈建议你先阅读一下相关的书籍,或搜索"关系型数据库设计"或"数据库规范化"在创建djangomodel之前,应当首先保证设计的数据库是规范化的bcache正确的使用cache能帮助我们提高数据库的性能详细的信息,我们会在今后的文章中作进一步介绍c何时使用null和blank当定义modelfield时,我们可以设置null=True和blank=True(默认都是False),知道何时设置null和blank对于开发人员也是十分重要的,在下面的表格中,我们一一列举了如何使用这两个选项:Field类型设置null=True设置blank=TrueCharField,TextField,SlugField,EmailField,CommaSeparatedIntegerField等不要设置django规定储存空字符串来代表空值,当从数据库中读取NULL或空值时都为空字符串可以设置设置后允许接受widget中为空值(即不填写),储存到数据库时空值变为空字符串FileField,ImageField不要设置django实际储存的是路径的字符串,因此同上可以设置同上BooleanField不要设置因为有NullBooleanField代替不要设置IntegerField,FloatField,DecimalField等可以设置如果你希望在数据库中能储存NULL可以设置设置后允许接受widget中为空值(即不填写),设置为True时必须同时设置null=TrueDateTimeField,DateField,TimeField等可以设置如果你希望在数据库中能储存NULL可以设置设置后允许接受widget中为空值(即不填写),设置为True时必须同时设置null=TrueForeignKey,ManyToManyField,OneToOneField可以设置如果你希望在数据库中能储存NULL可以设置设置后允许接受widget中为空值(即不填写)GenericIPAddressField可以设置如果你希望在数据库中能储存NULL可以设置设置后允许接受widget中为空值(即不填写)IPAddressField不推荐设置用GenericIPAddressField代替不推荐设置用GenericIPAddressField代替d什么时候使用BinaryField在django16中,新增了BinaryField,用于储存二进制数据(binarydata或bytes)对于BinaryField,我们无法使用ORM的filters,excludes或其他SQL *** 作但在少数情况下,我们会用到BinaryField,例如MessagePack格式的内容,传感器接受的原始数据和压缩数据等但需要注意的是,BinaryData一般都十分庞大,因此可能会拖慢数据库的速度如果发生这一现象,我们可以将binarydata储存在文件中,然后使用FileField储存该文件的路径信息还有,不要从BinaryField中直接读取文件并呈献给用户因为,1从数据库读写总是比从文件系统读写慢;2数据库备份会变得十分庞大,花费的时间;3获得文件的过程,增加了从django到数据库的这一环节3不要替换默认的ModelManager从ORM获取model,实际上是通过django中的Modelmanager完成的,django为每一个model提供了默认的modelmanager,我们不建议将其替换掉,因为:当使用model继承时,model会继承abstractbaseclassmodel的modelmanager,而不会继承非abstractbaseclass的managermodel的第一个modelmanager通常作为默认的manager,当被替换时,可能会发生不可预测的问题4数据库事务(Transaction)在django16中,ORM默认会autocommit每一个数据库查询,也就是说,每次使用mcreate()或mupdate()时,在数据库中马上就会做出相应的修改这样做的好处就是简化了初学者对ORM的理解但坏处就是,当一个view中包含两个数据库修改,可能一个成功,但另一个失败,这就可能导致数据库不完整,给我们带来很大的危险解决这一问题的方法就是使用数据库transaction,即将一系列数据库 *** 作包含在一个transaction中,当其中有一个失败时,其他 *** 作也会自动回退Django16为我们带来了一套崭新的既简单又强大的transaction机制,使我们方便的使用数据库transactiona将整个>
settingspy正常,mysql的配置文件也改过了。问题出在没有指定读取的配置文件,
修改 aettingspy :
迁移成功。
之前使用redis时,也发生过类似问题,要手动指定配置文件。
以上就是关于django数据库使用(django *** 作mysql数据库)全部的内容,包括:django数据库使用(django *** 作mysql数据库)、如何正确的使用和设置Database和Model、如何在阿里云上部署django等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)