The Definitive Guide To Django 2 学习笔记(九) 第五章 模型 (一)数据库访问
以MySql数据库为例,先到http://dev.mysql.com/downloads/connector/python/处下载MysqlConnector for python的连接器。
from django.shortcuts import render_to_response
import mysql.connector
def book_list(request):
db = mysql.connector.connect(user='me', db='mydb', passwd='secret', host='localhost')
cursor = db.cursor()
cursor.execute('SELECT name FROM books ORDER BY name')
names = [row[0] for row in cursor.fetchall()]
db.close()
return render_to_response('book_list.html', {'names': names})
这样就实现了对mysql数据库的访问,但这样做会有三个缺点:
1.数据库连接字符采用了硬编码的方式 2.我们写了很多样板代码,实际上是可以抽离出来的 3.跟Mysql数据库耦合,如果我们想要换成PostgreSQL,我们需要重新引用一个数据库连接器。
正如你所期待的,Django的数据层解决了这个问题:下面是一个简单的用Django数据库API如何写View页面的预览:
from django.shortcuts import render_to_response
from mysite.books.models import Book
def book_list(request):
books = Book.objects.order_by('name')
return render_to_response('book_list.html', {'books': books})
以后会解释这些代码的意思,现在只是看一下如何写的。
MTV(或MVC)开发模式
M代表 Model,T代表 Template,V代表View(有的框架称为MVC,V 代表View,C代表Controller)
如果熟悉MVC模式,很好理解,不熟悉的请查阅相关文档。
配置数据库
在settings.py文件中,像下面这样配置:
DATABASE_ENGINE = ''
DATABASE_NAME = ''
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''
DATABASE_ENGINE可以被设置成下表中的值:

DATABASE_NAME:是你的数据库名称 如果是SQLite就是数据库文件名
DATABASE_USER:用户名
DATABASE_PASSWORD:密码
DATABASE_HOST:主机名
The Definitive Guide To Django 2 学习笔记(九) 第五章 模型 (一)数据库访问的更多相关文章
- The Definitive Guide To Django 2 学习笔记(七) 第四章 模板 (三)使用模板系统
接下来,我们开始学习如何使用模板系统,但我们并不和前面说的View相结合,我们的这里的目的是展示模板系统是如何独立于Django框架运行的.下面是在pyhon代码中使用Django模板系统的基础例子: ...
- The Definitive Guide To Django 2 学习笔记(八) 第四章 模板 (四)基本的模板标签和过滤器
标签 下面的部分概述了常见的Django标签. if/else {%if%} 标签 对一个变量值进行测试,如果结果为true,系统将会显示在{%if%} 和 {%endif%}之间的一切,看个例子: ...
- The Definitive Guide To Django 2 学习笔记(六) 第四章 模板 (二)使用模板系统
模板系统不是django特有的,它是python的一个库,你可以在任何地方使用它. 使用方法: 1.使用 Template()方法创建Template对象.2.调用Template对象的render( ...
- The Definitive Guide To Django 2 学习笔记(五) 第四章 模板 (一)基本模板系统
引入模板系统的原因,view中引入硬编码并非明智的选择,设计上的任何改变都会需要改动代码.python代码和HTML代码应该分开,这是多数Web站点的共识,分开会提高效率. 基本模板系统 Django ...
- The Definitive Guide To Django 2 学习笔记(四) 动态URLs
前面的例子中,虽然时间是动态可变的,但它的URL却是静态的(/time/).很多时候,URL也是需要动态改变,然后展示出不通的内容来.现在我们就来创建一个可以动态改变URL的例子. 如果URLconf ...
- The Definitive Guide To Django 2 学习笔记(二) 第二个View 动态内容
“Hello World”只是简单的展现了Django 基本的工作机制,但它不是动态的网页.第二个View我们将创建一个动态的网页,该页面上将展现当前的时间和日期. 该View需要做两件事,第一,计算 ...
- The Definitive Guide To Django 2 学习笔记(一) Views and UrL confsRL
1.如何找到django在Ubuntu下的安装路径: 进入python命令行,import django,print(django.__path__) 2.使用django-admin.py 创建项目 ...
- The Definitive Guide To Django 2 学习笔记(三) URLconfs 和松耦合
前面的例子体现了一个设计模式中的重要思想,松耦合. 不论我们是将/time/改成/current_time/,还是新建一个/another-time-page/同样指向views.py中的 curre ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第五章:渲染流水线
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第五章:渲染流水线 学习目标 了解几个用以表达真实场景的标志和2D图像 ...
随机推荐
- MFC 带Ribbonbar的窗口 实现全屏和取消全屏
void CMainFrame::FullScreen(){ m_wndRibbonBar.ShowWindow(SW_HIDE);//隐藏工具栏 m_wndStatusBar. ...
- tomcat 部署 RESTful 服务实例
1.建立简单restfule服务 参考:java 利用JAX-RS快速开发RESTful 服务实例 简单代码: package com.example; import javax.ws.rs.GET; ...
- IT词汇表
本人采集到了数十万篇中文技术类博客,进行分词后根据出现的词频手工整理了一份IT词汇表,共计12000个,基本囊括了常见的中英文IT词汇,欢迎各位提出交流意见. 点此 下载
- iOS7重磅推新--不断尝试与重新设计的过程
来源:GBin1.com iOS7重磅推新--不断尝试与重新设计的过程 或许你心里已经有了关于iPhone最新操作系统的评价,可能你喜欢它,也可能不喜欢,事实上大多数设计者不喜欢.设计界似乎一致认为I ...
- Android布局及控件的属性说明
android常用的一些属性说明 android:id --- 为控件指定相应的ID android:text --- 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件 ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-如何修改代码字体
工具-选项 TwinCAT,PLC Environment,Text editor,然后在文本区域中修改字体 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i. ...
- 算法笔记_082:蓝桥杯练习 12-1三角形(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 为二维空间中的点设计一个结构体,在此基础上为三角形设计一个结构体.分别设计独立的函数计算三角形的周长.面积.中心和重心.输入三个点,输出这 ...
- Loadrunner关于页面检查的几个函数详解
环境:Loadrunner版本:8.0自建一个test.html文件:<html><head><meta name="google1" content ...
- angular 禁止事件冒泡 和 默认行为
事件冒泡和事件捕捉一直以来都是被讨论的话题,也许大家平时在工作中没有遇到过需要解决事件冒泡的情况举个例子: <body ng-click="fun1()"> <d ...
- [Objective-C] - NSObject
Foundation Framework Classes Data Storage: NSData provides object-oriented storage for arrays of ...