Django框架的ORM简介:
ORM ,全称 Object Relational Mapping ,中文叫做对象关系映射,通过 ORM 我们可以通过类的方式去操作数据库,而不用再写原生的SQL语句。通过把表映射成类,把行作实例,把字段作为属性, ORM 在执行对象操作的时候最终还是会把对应的操作转换为数据库原生语句。使用 ORM 有许多优点:
- 易用性:使用 ORM 做数据库的开发可以有效的减少重复SQL语句的概率,写出来的模型也更加直观、清晰。
- 性能损耗小: ORM 转换成底层数据库操作指令确实会有一些开销。但从实际的情况来看,这种性能损耗很少(不足5%),只要不是对性能有严苛的要求,综合考虑开发效率、代码的阅读性,带来的好处要远远大于性能损耗,而且项目越大作用越明显。
- 设计灵活:可以轻松的写出复杂的查询。
- 可移植性: Django 封装了底层的数据库实现,支持多个关系数据库引擎,包括流行的 MySQL 、 PostgreSQL 和 SQLite 。可以非常轻松的切换数据库。
映射模型到数据库中:
将 ORM 模型映射到数据库中,总结起来就是以下几步:
- 在 settings.py 中,配置好 DATABASES ,做好数据库相关的配置。
- 在 app 中的 models.py 中定义好模型,这个模型必须继承自 django.db.models 。
- 将这个 app 添加到 settings.py 的 INSTALLED_APP 中。
- 在命令行终端,进入到项目所在的路径,然后执行命令 python manage.py makemigrations 来生成迁移脚本文件。
- 同样在命令行中,执行命令 python manage.py migrate 来将迁移脚本文件映射到数据库中。
1、pip安装django项目所需要的库
(pip install dajngo)
一般将需要的包以及版本写入文本批量安装,方便环境迁移
eg:
Django==1.11.15
django-celery==3.2.2
django-cors-headers==2.4.0
django-crispy-forms==1.7.2
django-filter==1.0.4
elasticsearch==6.3.1
pymongo==3.7.1
PyMySQL==0.9.2
命令
pip install -r requirement.txt
2.创建项目
创建之前先cd切换到存放项目的目录
django-admin startproject fault # 工程项目名
- 与项目同名的目录,此处为fault。
- settings.py 是项目的整体配置文件。
- urls.py 是项目的URL配置文件。
- wsgi.py 是项目与WSGI兼容的Web服务器入口。
- manage.py 是项目管理文件,通过它管理项目。
3、创建子应用
python manage.py startapp core # 子应用名字
- admin.py 文件跟网站的后台管理站点配置相关。
- apps.py 文件用于配置当前子应用的相关信息。
- migrations 目录用于存放数据库迁移历史文件。
- models.py 文件用户保存数据库模型类。
- tests.py 文件用于开发测试用例,编写单元测试。
- views.py 文件用于编写Web应用视图。
4、配置settings.py
- 注册子应用core
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'core',
]
- 配置host准入
ALLOWED_HOSTS = ['*']
- 配置mysql连接
DATABASES = {
'default': {
"ENGINE": "django.db.backends.mysql",
"NAME": "fault",
"USER": "root",
"PASSWORD": "123456",
"HOST": "172.17.161.77",
"PORT": "",
}
}
也可以写入chaos.conf文件,然后在settings.py配置:
# mysql
CONFIG_FILE = '/etc/ptms/chaos.conf'
try:
execfile(CONFIG_FILE)
except IOError as e:
print('Skipping settings loading, no file at %s' % CONFIG_FILE)
except SyntaxError as e:
print('Invalid syntax in configuration at %s' % CONFIG_FILE)
raise e
- 语言和时区
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
- 配置static静态文件路径
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
5、同步数据库
- 生成映射文件migrations
python manage.py makemigrations core(不选应用名及生成所有)
- 将映射文件同步到sql创建表格(新项目应用app没新增model,也会新建django自带的后台表)
python manage.py migrate
- 如果2报错未成功,可能有历史映射问题,可以单次生成sql建表语句,直接数据库执行
python manage.py sqlmigrate core(子应用名) 0001
6、创建管理员账户管理后台
python manager.py createsuperuser
然后按照提示输入用户名(username),邮箱(Email),密码(password),再次输入密码。
7、调试启动项目
python manager.py runserver 0.0.0.0:8000
url.py配置了默认admin管理后台的路由
from django.conf.urls import url
from django.contrib import admin
urlpatterns = [
url(r'^api/admin/', admin.site.urls),
]
http://localhost:8080/admin
用新建的管理员账户,可以进入项目后台
8、可以在应用中添加简单的函数视图,在urls.py中纳入urlpatterns即可
from django.http import HttpResponse
from django.shortcuts import render
def index(request):
"""
index视图
:param request: 包含了请求信息的请求对象
:return: 响应对象
"""
return HttpResponse("hello the world!")
def testUpfile(request):
"""
render 渲染
"""
if request.method == "GET":
return render(request, "upload.html")
纳入url路由
from django.conf.urls import url
from django.contrib import admin
from core.views import testUpfile, index
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^api/test', testUpfile),
url(r'^index', index),
]
然后按照ORM映射在app应用上开发业务需要的东西了。