5数据模型和数据库

一个模型就是一个描述你数据表的python对象。不用再通过SQL来操作数据库,而是使用python对象来操作数据库。

5.1rango要求

。。。一个目录下面有多个下面

。。。一个目录有名字,访问量和喜爱量

。。。一个页面有题目,URL和一定数量的视图

5.2告诉django你的数据库

在settings.py里面进行配置,添加如下代码:

DATABASE_PATH = os.path.join(PROJECT_PATH,'rango.db')

DATABASES = {

  'default':{

    'ENGINE':'django.db.backends.sqlite3',

    'NAME':DATABASE_PATH,

}

}

5.3创建数据模型

在rango/models里面定义两个类。都要继承自django.db.models.Model.这两个类代表目录和页面,代码如下:

class Catetory(models.Model):

  name = models.CharField(max_length=128,unique=True)

  def  __unicode__(self):

    return self.name

class Page(models.Model):

  category = models.ForeignKey(Category)

  title = models.CharField(max_length=128)

  url = models.URLField()

  views = models.IntegerField(default)

  def __unicode__(self):

    return self.title

5.4创建并同步数据库

创建好之后我们需要通过manage.py来同步数据库,执行下面的命令:

python manage.py syncdb

成功会显示如下图

5.5生成SQL

使用命令python manage.py sql rango

5.6django模型和django shell

5.7配置admin接口

django还有一个特点就是提供了后台管理数据库中表,同样也需要在settings.py里面配置

INSTALLED_APPS = (

  'django.contrib.auto',

  'django.contrib.contenttypes',

  'django.contrib.sessions',

  'django.contrib.sites',

  'django.contrib.messages',

  'django.contrib.staticfiles',

  'django.contrib.admin',

  'rango',

)

然后运行python manage.py syncdb

完成以上步骤之后,就会有一个django_admin_log表。然后再配置工程文件夹下面的urls.py文件,文件显示如下:

from django.conf.urls import patterns,include,url

from django.conf import settings

from django.contrib import admin

admin.autodiscover()

urlpatterns = patterns('',

  url(r'rango/',include('rango.url')),

  url(r'admin/',include(admin.site.urls)),

)

if settings.DEBUG:

  urlpatterns += patterns(

    'django.views.static',

    (r'media/(?P<path>.*)',

    'serve',

    {'document_root':settings.MEDIA_ROOT}

),

)

到这里之后,我们需要告诉django的admin应用我们新建的数据模型。所以我们需要在rango下面新建一个admin.py问价。然后添加下面的代码

from django.contrib import admin

from rango.models import Catetory,Page

admin.site.register(Category)

admin.site.register(Page)

上面的代码就是给admin接口注册数据模型。再次重启django服务器,访问http://127.0.0.1:8000/admin/,会见到下面的页面,输入你之前创建的用户名和密码

5.8新建一个通用脚本

为了避免每次修改数据模型之后,都要删除数据库,可以工程根目录下面新建下面的文件populate_rango.py,添加如下代码:

import os

def populate():
python_cat = add_cat('Python') add_page(cat=python_cat,
title="Official Python Tutorial",
url="http://docs.python.org/2/tutorial/") add_page(cat=python_cat,
title="How to Think like a Computer Scientist",
url="http://www.greenteapress.com/thinkpython/") add_page(cat=python_cat,
title="Learn Python in 10 Minutes",
url="http://www.korokithakis.net/tutorials/python/") django_cat = add_cat("Django") add_page(cat=django_cat,
title="Official Django Tutorial",
url="https://docs.djangoproject.com/en/1.5/intro/tutorial01/") add_page(cat=django_cat,
title="Django Rocks",
url="http://www.djangorocks.com/") add_page(cat=django_cat,
title="How to Tango with Django",
url="http://www.tangowithdjango.com/") frame_cat = add_cat("Other Frameworks") add_page(cat=frame_cat,
title="Bottle",
url="http://bottlepy.org/docs/dev/") add_page(cat=frame_cat,
title="Flask",
url="http://flask.pocoo.org") # Print out what we have added to the user.
for c in Category.objects.all():
for p in Page.objects.filter(category=c):
print "- {0} - {1}".format(str(c), str(p)) def add_page(cat, title, url, views=0):
p = Page.objects.get_or_create(category=cat, title=title, url=url, views=views)[0]
return p def add_cat(name):
c = Category.objects.get_or_create(name=name)[0]
return c # Start execution here!
if __name__ == '__main__':
print "Starting Rango population script..."
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'tango_with_django_project.settings')
from rango.models import Category, Page
populate()
然后使用python populate_rango.py命令执行这个文件,得到下面的结果


【翻译】How To Tango With Django 1.5.4 第五章的更多相关文章

  1. 《Django By Example》第五章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag注:大家好,我是新来的翻译, ...

  2. 【翻译】How To Tango With Django 1.5.4 第四章

    4.模板和静态媒体 这章讲解模板引擎 4.1使用模板 前面我们讲解了view和url 映射,创建出了django 的web页面,现在就要将模板混合进去 好的网站在布局上总是有许多重复的.django提 ...

  3. 【翻译】How To Tango With Django 1.5.4 第三章

    django基础 3.1测试你的配置 测试你的python版本和你的django版本是否兼容 3.2新建django工程 在dos里面进到你事先新建的code文件夹,然后在执行下列命令新建工程 c:\ ...

  4. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  5. Tango with Django 1.9 中文——1.概述

    译者注:英文书地址https://leanpub.com/tangowithdjango19/,作者为Leif Azzopardi 和 David Maxwell.本文仅为尝试.学习和交流,著作权利归 ...

  6. 《Django By Example》第六章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:无他,祝大家年会都中奖!) 第六章 ...

  7. 《Entity Framework 6 Recipes》中文翻译系列 (22) -----第五章 加载实体和导航属性之延迟加载

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 第五章 加载实体和导航属性 实体框架提供了非常棒的建模环境,它允许开发人员可视化地使 ...

  8. 《Introduction to Tornado》中文翻译计划——第五章:异步Web服务

    http://www.pythoner.com/294.html 本文为<Introduction to Tornado>中文翻译,将在https://github.com/alioth3 ...

  9. Gradle 1.12用户指南翻译——第四十五章. 应用程序插件

    本文由CSDN博客貌似掉线翻译,其他章节的翻译请参见: http://blog.csdn.net/column/details/gradle-translation.html 翻译项目请关注Githu ...

随机推荐

  1. 《Getting Started with Storm》章节一 基础

    注:括号里的字,并且是(灰色)的,是我个人的理解,如有差错,欢迎交流 Storm是一个分布式的.可靠的.容错的数据流处理系统(流式计算框架,可以和mapreduce的离线计算框架对比理解).整个任务被 ...

  2. LightOJ1017 Brush (III)(DP)

    题目大概说一个平面上分布n个灰尘,现在要用一个宽w的刷子清理灰尘:选择一个起点,往水平线上扫过去这个水平线上的灰尘就消失了.问最多进行k次这样的操作能清理最多多少灰尘. 没什么的DP. 先按垂直坐标给 ...

  3. iOS学习11之OC继承

    面向对象的三大特性:封装,继承,多态. 1.继承 继承既能保证类的完整,又能简化代码. 把公共的⽅法和实例变量写在⽗类⾥,⼦类只需要写⾃⼰独有的实例变量和⽅法即可. 继承是⾯向对象三⼤特性之⼀,合理的 ...

  4. linux 安装eclipse 和cdt

    这个东西说起来简单,但是经历了无数次到失败,终于还是安装完成了. 最早到时候我下载了eclipse和cdt让后安装,安装完成以后,无法运行和编译程序 后来我学到了一个牛逼的命令yum 这个命令会帮助我 ...

  5. BZOJ4538 : [Hnoi2016]网络

    求出这棵树的dfs序,对于一条链$u-v$,假设$st[u]\leq st[v]$,那么一条链不经过点$x$当且仅当它满足下面任意一个条件: 1.$st[v]<st[x]$ 2.$st[u]&g ...

  6. 关于c语言模拟c++的多态

    关于c++多态,个人认为就是父类调用子类的方法,c++多态的实现主要通过虚函数实现,如果类中含有虚函数,就会出现虚函数表,具体c++多态可以参考<深度探索c++对象模型> c语言模拟多态主 ...

  7. ACM 汉诺塔(三)

    汉诺塔(三) 时间限制:3000 ms  |  内存限制:65535 KB 难度:3   描述 在印度,有这么一个古老的传说:在世界中心贝拿勒斯(在印度北部)的圣庙里,一块黄铜板上插着三根宝石针.印度 ...

  8. ACM: 强化训练-Inversion Sequence-线段树 or STL·vector

    Inversion Sequence Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%lld & %llu D ...

  9. tornado 学习笔记1 引言

    从事软件开发这行业也快5年啦,其实从事的工作也不完全是软件开发,软件开发只是我工作中的一部分.其中包括课题研究.信息化方案设计.软件开发.信息系统监理.项目管理等工作,比较杂乱.开发的软件比较多,但是 ...

  10. ucgui

    消息机制 http://blog.csdn.net/jacklam200/article/details/5919898 font http://blog.csdn.net/jacklam200/ar ...