Django项目实践3 - Django模型

http://blog.csdn.net/pipisorry/article/details/45061579

上篇:Django项目实践2 - Django模板

Django 模型

{数据和逻辑能够彻底地分开}

Django 对各种数据库提供了很好的支持,包括:PostgreSQL、MySQL、SQLite、Oracle。Django 为这些数据库提供了统一的调用API。

1.在 Django 中使用 MySQL

MySQL 是 Web 应用中最常用的数据库。下面将以 Mysql 作为实例进行介绍。[MySQL 教程]

1)django要求MySQL4.0或更高的版本。 3.X 版本不支持嵌套子查询和一些其它相当标准的SQL语句。

2)还需要从 http://www.djangoproject.com/r/python-mysql/ 下载安装
MySQLdb
。如果用的是python3从这下载mysqldb for python3

如果你正在使用Linux,检查下你系统的包管理器是否提供了叫做python-mysql,python-mysqldb,myspl-python或者相似的包。

Note: MySQL Installer is 32 bit, but will install both 32 bit and 64 bit binaries.

2. 使用python3自带的数据库SQLite

教程见[Django Documentation - Writing your first Django app, part 1 - Database setup]


数据库配置

我们在项目的 settings.py 文件中找到 DATABASES 配置项,将其信息修改为:

DATABASES = {
    ‘default‘: {
        ‘ENGINE‘: ‘django.db.backends.mysql‘,
        ‘NAME‘: ‘test‘,
        ‘USER‘: ‘test‘,
        ‘PASSWORD‘: ‘test123‘,
        ‘HOST‘:‘localhost‘,
        ‘PORT‘:‘3306‘,
    }
}

上面包含数据库名称和用户的信息,它们与MySQL中对应数据库和用户的设置相同。Django根据这一设置,与MySQL中相应的数据库和用户连接起来。

定义模型

创建 APP

Django规定,如果要使用模型,必须要创建一个app。我们使用以下命令创建一个 TestModel 的 app:

python manage.py startapp TestModel

目录结构如下:

HelloWorld
|-- TestModel
|   |-- __init__.py
|   |-- admin.py
|   |-- models.py
|   |-- tests.py
|   `-- views.py

我们修改 TestModel/models.py文件,代码如下:

# models.py
from django.db import models

class Test(models.Model):
    name = models.CharField(max_length=20)

以上的类名代表了数据库名称,且继承了models.Model,类里面的字段代表数据表中的字段(name),数据类型则由CharField(相当于varchar)、DateField(相当于datetime), max_length 参数限定长度。

接下来在settings.py中找到INSTALLED_APPS这一项,如下:

INSTALLED_APPS = (
    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    ‘TestModel‘,               # 添加此项
)

在命令行中运行python manage.py syncdb,看到几行"Creating table…"的字样,你的数据表就创建好了。

Creating tables ...
……
Creating table TestModel_test  #我们自定义的表
……

表名组成结构为:app名_类名(如:TestModel_test)。

Note:尽管我们没有在models给表设置主键,但是Django会自动添加一个id作为主键。

数据库操作

接下来我们在 HelloWorld 目录中添加 testdb.py 文件,并修改urls.py:

from django.conf.urls import *
from HelloWorld.view import hello
from HelloWorld.testdb import testdb

urlpatterns = patterns("",
        (‘^hello/$‘, hello),
        (‘^testdb/$‘, testdb),
)

添加数据

添加数据需要先创建对象,然后再执行 save 函数,相当于SQL中的INSERT:

# -*- coding: utf-8 -*-

from django.http import HttpResponse

from TestModel.models import Test

# 数据库操作
def testdb(request):
	test1 = Test(name=‘w3cschool.cc‘)
	test1.save()
	return HttpResponse("<p>数据添加成功!</p>")

访问http://192.168.45.3:8000/testdb/ 就可以看到数据添加成功的提示。

获取数据

Django提供了多种方式来获取数据库的内容,如下代码所示:

# -*- coding: utf-8 -*-

from django.http import HttpResponse

from TestModel.models import Test

# 数据库操作
def testdb(request):
	# 初始化
	response = ""
	response1 = ""

	# 通过objects这个模型管理器的all()获得所有数据行,相当于SQL中的SELECT * FROM
	list = Test.objects.all()

	# filter相当于SQL中的WHERE,可设置条件过滤结果
	response2 = Test.objects.filter(id=1) 

	# 获取单个对象
	response3 = Test.objects.get(id=1) 

	# 限制返回的数据 相当于 SQL 中的 OFFSET 0 LIMIT 2;
	Test.objects.order_by(‘name‘)[0:2]

	#数据排序
	Test.objects.order_by("id")

	# 上面的方法可以连锁使用
	Test.objects.filter(name="w3cschool.cc").order_by("id")

	# 输出所有数据
	for var in list:
		response1 += var.name + " "
	response = response1
	return HttpResponse("<p>" + response + "</p>")

输出结果如下图所示:

更新数据

修改数据可以使用 save() 或 update():

# -*- coding: utf-8 -*-

from django.http import HttpResponse

from TestModel.models import Test

# 数据库操作
def testdb(request):
	# 修改其中一个id=1的name字段,再save,相当于SQL中的UPDATE
	test1 = Test.objects.get(id=1)
	test1.name = ‘w3cschool菜鸟教程‘
	test1.save()

	# 另外一种方式
	#Test.objects.filter(id=1).update(name=‘w3cschool菜鸟教程‘)

	# 修改所有的列
	# Test.objects.all().update(name=‘w3cschool菜鸟教程‘)

	return HttpResponse("<p>修改成功</p>")

删除数据

删除数据库中的对象只需调用该对象的delete()方法即可:

# -*- coding: utf-8 -*-

from django.http import HttpResponse

from TestModel.models import Test

# 数据库操作
def testdb(request):
	# 删除id=1的数据
	test1 = Test.objects.get(id=1)
	test1.delete()

	# 另外一种方式
	# Test.objects.filter(id=1).delete()

	# 删除所有数据
	# Test.objects.all().delete()

	return HttpResponse("<p>删除成功</p>")

from:http://blog.csdn.net/pipisorry/article/details/45061579

时间: 2024-07-29 01:20:52

Django项目实践3 - Django模型的相关文章

Django项目实践4 - Django网站管理(后台管理员)

http://blog.csdn.net/pipisorry/article/details/45079751 上篇:Django项目实践3 - Django模型 Introduction 对于某一类站点, 管理界面 是基础设施中很重要的一部分. 这是以网页和有限的可信任管理者为基础的界面,它能够让你加入,编辑和删除站点内容. 常见的样例: 你能够用这个界面公布博客,后台的站点管理者用它来润色读者提交的内容,你的客户用你给他们建立的界面工具更新新闻并公布在站点上.这些都是使用管理界面的样例. 创

Django项目实践2 - Django模板

http://blog.csdn.net/pipisorry/article/details/45061511 上篇:Django项目实践1 - 创建Django项目 Django模板 {视图和模板对逻辑和显示进行了分隔} 上面是使用 django.http.HttpResponse() 来输出"Hello World!".该方式将数据与视图混合在一起,不符合Django的MVC思想.或者HTML被直接硬编码在 Python 代码之中. html = "<html>

Django项目实践3 - Django模型(数据库字段及操作)

http://blog.csdn.net/pipisorry/article/details/45725953 数据库字段 时间字段 DateTimeField和DateField和TimeField存储的内容分别对应着datetime(),date(),time()三个对象. auto_now=Ture,字段保存时会自动保存当前时间,但要注意每次对其实例执行save()的时候都会将当前时间保存,也就是不能再手动给它存非当前时间的值. auto_now_add=True,字段在实例第一次保存的时

Django项目实践2 - Django模板(常用语法规则)

http://blog.csdn.net/pipisorry/article/details/45727309 模板中常用的语法规则 {最新版本的Django语法可能有改变,不支持的操作可能支持了.[HTML教程 - 基本元素/标签及属性]} Django 模板标签 if/else 标签 1. 基本语法格式如下: {% if condition %} ... display {% endif %} 或者: {% if condition1 %} ... display 1 {% elif con

win10启动django项目报错 Django RuntimeError: maximum recursion depth exceeded

错误:Django RuntimeError: maximum recursion depth exceeded 原因出自Python\Lib\fuctools.py 把 convert = {    '__lt__': [('__gt__', lambda self, other: other < self),                ('__le__', lambda self, other: not other < self),                ('__ge__', 

Django基础五之django模型层(二)多表操作

目录 一 创建模型 关于db_column和verbose_name 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询(基于join实现的) 进阶练习(连续跨表) 五 聚合查询.分组查询.F查询和Q查询 查询练习 F查询与Q查询 F查询 Q查询 六 ORM执行原生sql语句(了解) 执行原生查询 直接执行自定义SQL 七 Python脚本中调用Django环境(django外部脚本使用models) 八 补充多个app配置models 本节目录 一 创建模型 表和表之间的关系

django项目的生产环境部署,利用nginx+uwsgi

1.坏境准备 centos6.5 django项目 python坏境(python3.6,) 所需的各种模块(django,uwsgi,sqlite3)具体看坏境 我的测试django项目的数据库用的是sqlite,这里只是做部署, 重点是nginx的关于Django项目+uwsgi配置文件 本次的项目:teacher.zip 安装各种坏境 1.安装sqlite3 https://sqlite.org/2017/sqlite-autoconf-3180000.tar.gz tar sqlite-

Django之真正创建一个django项目

真正创建一个django项目 1 创建Django项目     :new-project 2 创建APP :  python manager.py startapp app01 3 setting 配置 : 配置APP INSTALLED_APPS中加上"app01" 配置静态文件 首先在项目下创建静态文件夹static 然后在setting下添加 STATICFIFLES_DIRS=( os.path.join(BASE_DIR, 'static'), ) 注意一般开始就要配置好st

为django项目创建虚拟环境

1. 先创建一个存放虚拟环境的目录  /opt/venl mkdir /opt/venl 2. cd 到该存放虚拟环境的目录下,并创建一个虚拟环境 virtualenv是如何创建“独立”的Python运行环境的呢?原理很简单,就是把系统Python复制一份到virtualenv的环境,用命令source venv/bin/activate进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境 cd /opt/ve