
1 安装Django
[plain] view plain copy
cd Django-14
python setuppy install
2 安装postgresql的客户端:
[plain] view plain copy
sudo apt-get install -y postgresql-client-91 python-psycopg2
3 新建project:
[plain] view plain copy
django-adminpy startproject myproject
4 在myproject下新建app:
[plain] view plain copy
python managepy startapp myapp
4 新增环境变量:
编辑/etc/profile文件,在末尾加入以下语句:
[plain] view plain copy
<span style="color:#FF0000;"> export PYTHONPATH=$PYTHONPATH:/home/yc/src/myproject
export DJANGO_SETTINGS_MODULE=myprojectsettings</span>
5
假设数据库已经由Django的另一个应用(名称为otherapp)建好,数据库类型是postgresql,名称为mydb,位于
192168123。见好的数据库中有一个表,名称是otherapp_user,则将otherapp/modelspy拷贝到myapp
/modelspy。
注意检查modelspy下的class user类的class Meta:部分,如果没有applabel标签,则要加上:app_label='otherapp'
再修改/home/yc/src/myproject下的settingspy文件,如下:
[plain] view plain copy
DATABASES = {
'default': {
'ENGINE': 'djangodbbackendspostgresql_psycopg2', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'
'NAME': 'mydb', # 'vps2db_test1' Or path to database file if using sqlite3
'USER': 'postgres', # Not used with sqlite3
'PASSWORD': '123', # Not used with sqlite3
'HOST': '192168123', # Set to empty string for localhost Not used with sqlite3
'PORT': '5432', # Set to empty string for default Not used with sqlite3
}
}
[plain] view plain copy
INSTALLED_APPS = (
'djangocontribauth',
'djangocontribcontenttypes',
'djangocontribsessions',
'djangocontribsites',
'djangocontribmessages',
'djangocontribstaticfiles',
'<span style="color:#FF0000;">myapp</span>',
)
6 在myapp目录下编写测试程序
[python] view plain copy
from models import user
if __name__=="__main__":
try:
u = userobjectsget(id=user_id)
except userDoesNotExist:
print "user not exist)
return None
else:
return u
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继承很少被用到, 和其他两种继承也有着许多不一样之处
请不要使用多表(multi-table)继承, 因为它既消耗资源又复杂, 如果可以, 尽量使用OneToOneFields和ForeignKeys代替
django项目中, 创建时间和修改时间这两个field是最用到的, 下面给出一个abstract base class继承的例子:
2 Django Model的设计
如何设计出好的django model可能是最难也是最复杂的一个话题了, 在此, 我们看看一些基本的技巧吧:
a 规范化
我们首先建议了解数据库规范化(database normalization) 如果你还不清楚这是什么, 那么, 我们强烈建议你先阅读一下相关的书籍, 或搜索"关系 型数据库设计"或"数据库规范化" 在创建django model之前, 应当首先保证设计的数据库是规范化的
b cache
正确的使用cache能帮助我们提高数据库的性能 详细的信息, 我们会在今后的文章中作进一步介绍
c 何时使用null和blank
当定义model field时, 我们可以设置null=True和blank=True (默认都是False), 知道何时设置null和blank对于开发人员也是十分重要的, 在下 面的表格中, 我们一一列举了如何使用这两个选项:
d 什么时候使用BinaryField
在django 16中, 新增了BinaryField, 用于储存二进制数据(binary data或 bytes) 对于BinaryField, 我们无法使用ORM的filters, excludes或其他SQL *** 作 但在少数情况下, 我们会用到BinaryField, 例如MessagePack格式的内容, 传感器接受的原始数据和压缩数据等 但需要注意 的是, Binary Data一般都十分庞大, 因此可能会拖慢数据库的速度 如果发生这一现象, 我们可以将binary data储存在文件中, 然后使用FileField储 存该文件的路径信息
还有, 不要从BinaryField中直接读取文件并呈献给用户 因为, 1 从数据库读写总是比从文件系统读写慢; 2 数据库备份会变得十分庞大, 花费更多 的时间; 3 获得文件的过程, 增加了从django到数据库的这一环节
3 不要替换默认的Model Manager
从ORM获取model, 实际上是通过django中的Model manager完成的, django为每一个model提供了默认的model manager, 我们不建议将其替换掉, 因为:
当使用model继承时, model会继承 abstract base class model的model manager, 而不会继承非abstract base class的manager
model的第一个model manager通常作为默认的manager, 当被替换时, 可能会发生不可预测的问题
4 数据库事务 (Transaction)
在django 16中, ORM默认会autocommit每一个数据库查询, 也就是说, 每次使用mcreate()或mupdate()时, 在数据库中马上就会做出相应的修 改 这样做的好处就是简化了初学者对ORM的理解 但坏处就是, 当一个view中包含两个数据库修改, 可能一个成功, 但另一个失败, 这就可能导致数据库不 完整, 给我们带来很大的危险
解决这一问题的方法就是使用数据库transaction, 即将一系列数据库 *** 作包含在一个transaction中, 当其中有一个失败时, 其他 *** 作也会自动回退 Django 16 为我们带来了一套崭新的既简单又强大的transaction机制, 使我们方便的使用数据库transaction
a 将整个>
你这个问题描述,着实有点让人费解。感觉你对这方面了解不深,所以一般像你这样的问题很少会有人回答,因为回答之后,你会有更多的疑问,甚至是一直问下去。
在学习的过程中,你要学会自己去搜索解决
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>
以上就是关于如何独立使用django的数据库访问功能全部的内容,包括:如何独立使用django的数据库访问功能、Django 中使用model 怎么查询不等于某个值的情况、Django 前台与后台交互问题实现点击按钮后 后台查询数据库 并把列表传到前台 ,如果使用jqu等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)