`

Django小例子 – 模型数据的模板呈现

阅读更多
学习Django的这几天,学习过程还是很愉快的,django采用的MVC架构,学习曲线十分平缓,在深入学习之前,先简单的整理记录下django从数据库中获取数据并在模板中使用的方法。温故而知新 ^_^

首先假设一个简单的场景,数据库中存放着作者和书目的信息。这是一种多对多(ManyToMany)的结构,因为一个作者可以写多本书,一本书也可能由多个作者共同完成。我们如何使用Django来创建项目,配置数据库,创建视图,模板,配置URL路由,最后在浏览器访问我们动态创建的页面、

如下的部分算作是记录,也会简单的说明下Django的工作原理。入果是新手,估计看看也会有所收获,能对Django有个大概的了解。想系统的学习Django的小伙伴推荐你看《Django Book(中文版)》,这个文档有些年头,不过最近学习来看,原理和基本操作都没变,就是目录结构随着版本的升级发生变化,没啥大的影响,如英语可以,看Django官方文档当然是最好的。

假设你已经配置好了Django的环境。那么使用如下命令,创建我们的项目:
django-admin.py startproject project
cd project
python mamages.py startapp blog

这样我们就创建完成一个基本的项目了。来 tree 一下看看:
[root@Init-smile project]# tree

显示结果:
.
├── blog
│   ├── admin.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── manage.py
└── project
  ├── __init__.py
  ├── settings.py
  ├── urls.py
  └── wsgi.py

3 directories, 11 files

需要修改的文件是settings.py,在里面注册我们新建的APP,并且配置mysql数据库。找到
INSTALLED_APPS = (
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  'blog'
)

添加APP,按如下的事例配置数据库,NAME,USER,PASSWORD换成你的。
DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    #'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    'NAME': 'AuthBooks',
    'USER': 'root',
    'PASSWORD': '123456',
  }
}

接下来,配置URL路由,修改urls.py,这个的作用就是匹配网址,提交给views.py进行处理
from django.conf.urls import patterns, include, url
from django.contrib import admin

urlpatterns = patterns('',
  # Examples:
  # url(r'^$', 'project.views.home', name='home'),
  # url(r'^blog/', include('blog.urls')),

  url(r'^admin/', include(admin.site.urls)),
  url(r'^author/$', 'blog.views.show_author'),
  url(r'^book/$', 'blog.views.show_book'),
)

这样,我们的网址如127.0.0.1/author和127.0.0.1/book就会对应进入不同的处理函数来对他们进行处理,接下来我们就编写views.py,实现相应功能。等等,在这之前,我们必须先了解下数据库,了解下如何建立数据,初始化表,获取数据。这样我们才能继续进行。在models.py模块中来定义我们的表如下,有Author,Book表,Author保存着作者名,Book保存着书名和作者名
from django.db import models

# Create your models here.

class Author(models.Model):
  name = models.CharField(max_length=30)

  def __unicode__(self):
    return self.name

class Book(models.Model):
  name = models.CharField(max_length=30)
  authors = models.ManyToManyField(Author)

  def __unicode__(self):
    return self.name

接下来,我们要初始化数据库。使用如下命令。
python manage.py syncdb




Operations to perform:

Apply all migrations: admin, contenttypes, auth, sessions

Running migrations:

Applying contenttypes.0001_initial… OK

Applying auth.0001_initial… OK

Applying admin.0001_initial… OK

Applying sessions.0001_initial… OK

You have installed Django’s auth system, and don’t have any superusers defined. Would you like to create one now? (yes/no):

这里问我们是不是建立一个管理账户。我们选择Yes,然后根据提示创建完成。去项目根目录看看是不是有一个名为db.sqlite3的数据库了~

接下来,我们通过项目提供的shell练习一下添加作者,书籍等数据。然后再到views.py模块中进行处理。
python manage.py shell

这样,我们就进入了一个django为我们配置好的shell环境,我们可以方便的导入相关的模块而不必担心not found问题。

接下来运行如下一系列命令。来为数据库添加记录
from blog.models import Author, Book
Author.objects.create(name='sin')
Author.objects.create(name='sun')
Author.objects.create(name='lin')
b1 = Book()
b1.name = 'book1'
b1.save()
b2 = Book()
b2.name = 'book2'
b2.save()
b3 = Book()
b3.name = 'book3'
b3.save()
sin = Author.objects.get(name__exact='sin')
sun = Author.objects.get(name__exact='sun')
lin = Author.objects.get(name__exact='lin')
b1.authors.add(sin)
b1.authors.add(sun)
b2.authors.add(sun)
b3.authors.add(sun)
b3.authors.add(lin)

根据上面的命令就可以建立起如下图所示的Authors-Books对应关系

author-book


补充一些常用命令

(根据书本查作者)

查询每本书对应的作者:
>>> b1.authors.all()
[<Author: sin>, <Author: sun>]
>>> b2.authors.all()
[<Author: sun>]
>>> b3.authors.all()
[<Author: sun>, <Author: lin>]

查询书中的指定作者看是否存在
b1.authors.filter(name__exact='sin')

删除书的作者:
b1.authors.remove(sun)

(根据作者查询他出的书)
>>> sin.book_set.all()
[<Book: book1>]
>>> sun.book_set.all()
[<Book: book1>, <Book: book2>, <Book: book3>]
>>> lin.book_set.all()
[<Book: book3>]

事实上,book_set相当于前面使用的objects
>>> sin.book_set.add(b3)
>>> sin.book_set.remove(b3)
>>> sin.book_set.all()
[<Book: book1>]

为作者添加新的书目:
sin.book_set.create(name='book4')

如上的命令都是封装好的数据库操作指令,所做的所有改动都会保存在数据库中。下面,就可以进行view.py的配置,和模板的编写,来在html上直观的显示出作者和书目的对应关系 view.py内容如下,它就是用来处理对应的URL都做什么,在这里是返回处理过的模板
from django.shortcuts import render_to_response
from blog.models import Author, Book

# Create your views here.

def show_author(request):
  authors = Author.objects.all()
  return render_to_response('show_author.html', {'authors':authors})

def show_book(request):
  books = Book.objects.all()
  return render_to_response('show_book.html', {'books':books})

在blog的目录下新建templates文件夹,这是系统默认的模板搜索路径,所以直接在里面新建show_author.html 内容如下:
{% for author in authors %}
  <div>
    <h3>{{ author.name }}</h3>
    {% for book in author.book_set.all %}
    <li>{{ book.name }}</li>
    {% endfor %}
  </div>
{% endfor %}

再建立show_book.html,内容如下:
{% for book in books %}
        <h3>{{ book.name }}</h3>
        <div>
                {% for author in book.authors.all %}
                        <li>{{ author.name }}</li>
                {% endfor %}
        </div>
{% endfor %}

OK,如上就是构建django项目创建APP,配置数据库,添加数据,配置URL路由,编写视图,模板的所有内容了。 下面来运行我们的项目,并在浏览器端访问。

在project目录下运行:
python manage.py runserver

这样,你在本地通过127.0.0.1:8000/author和127.0.0.1:8000/book就可以看到效果了

如果你使用的虚拟机(桥接上网),那么可以使用如下命令
python manage.py runserver 0.0.0.0:80

如上就可以通过你的虚拟机IP地址进行访问了。(你可能需要使用iptables -F来临时关闭iptables)

好的,看看是不是和我的运行的结果一样呢~

autor-htmlbook-html

整理完毕,继续下一步学习。
分享到:
评论

相关推荐

    Django小例子

    【Django小例子】是一个基于Python的Web框架Django创建的简单网站示例。Django是一个强大而灵活的开源框架,用于快速开发安全且可维护的网站。这个小例子展示了如何利用Django的基本功能来构建一个运行中的网站,...

    Python+Django 官网例子

    模型负责处理数据,模板负责呈现数据,而视图则负责这两者之间的逻辑。现在,让我们通过"FirstProgram"来逐步解析Django的入门教程。 1. **安装Django**: 在开始前,确保已安装Python。然后,通过Python的包管理...

    Python web开发框架Django小例子

    这个小例子将引导我们深入了解Django的基础知识和核心概念。 首先,`mysite`这个文件名通常对应于Django项目的根目录。在Django中,一个项目(如`mysite`)是由多个应用(apps)组成的,每个应用专注于特定的功能或...

    django小例子

    总的来说,"django小例子"是一个学习Django框架的好起点,它涵盖了Web开发中的基本概念,如模型、视图、URL配置以及模板。通过这个实例,开发者可以深入了解Django的工作原理,并逐步掌握构建复杂Web应用的技能。

    django简单例子

    在Django中,模型是数据结构的定义,它通常与数据库表相对应。模型类定义了字段及其属性,如数据类型、验证规则等。例如,一个简单的模型可能包含标题和内容字段,用于存储博客文章的信息。 ```python from django....

    Django 小例子

    本小例子将带你了解Django的基础知识,包括项目的创建、应用的设定、数据库模型、视图处理以及模板渲染。我们将通过一个简单的博客系统来学习这些核心概念。 【描述】 在这个Django小例子中,我们首先会安装Django...

    ios运行django的例子

    Django提供了模型-视图-控制器(MVC)架构,并内置了ORM(对象关系映射),用于处理数据库操作,还包含强大的模板系统和管理后台,便于快速构建高效、安全的应用。 **iOS与Python** 要在iOS设备上运行Python代码,...

    django例子CRUD完整版

    在这个“django例子CRUD完整版”中,我们将探讨如何使用 Django 实现基本的 Create(创建)、Read(读取)、Update(更新)和 Delete(删除)操作,这些都是任何数据管理应用的基础。 首先,`manage.py` 是 Django ...

    Django模板语法视图向模板发送数据

    在Python的Web开发框架Django中,模板是用于呈现动态内容的关键组件,它与视图和模型一起构成了MVC(Model-View-Template)架构。本节将深入探讨如何使用Django模板语法来向模板传递数据,以及如何利用模板语言进行...

    django例子201511.epub.7z

    描述中提到的“django例子201511.epub.7z”可能包含一系列Django项目的实战示例,这些示例可能涵盖了从基础的CRUD操作(创建、读取、更新、删除)到更高级的主题,如用户认证、表单处理、分页、URL路由、模板系统、...

    Python3.5,django1.10实用例子2

    在本项目"Python3.5,django1.10实用例子2"中,我们将深入探讨如何利用Python 3.5和Django 1.10框架进行高效开发,特别是涉及AJAX、线程(thread)以及子进程(subprocess)调用系统命令的技术。这个项目可能包含一...

    8. Django 表单与模型

    在Django框架中,表单和模型是两个非常重要的概念,它们构成了数据处理的核心部分。本文将深入探讨Django中的表单(Forms)和模型(Models),以及它们如何协同工作来构建高效、安全的Web应用。 ### Django模型...

    基于django框架的博客例子和uploadify插件的例子

    模型用于数据建模,视图处理请求并返回响应,而模板则负责呈现用户界面。 1. **Django Models**: Django中的模型是与数据库交互的主要接口。在博客应用中,模型可能包括`Post`类,包含如标题、内容、作者和发布日期...

    Django 查询数据库并返回页面的例子

    本文将介绍在Python框架Django中如何进行...通过这个例子,我们可以了解到Django的视图和模板是如何相互协作,实现Web应用中的数据展示功能的。希望这些知识点能为读者提供一定的参考价值,并在实际开发中加以应用。

    python的Django框架模型

    Python的Django框架模型是Django的核心组成部分之一,它提供了数据模型的设计和数据库交互的能力。在Django中,模型(Model)是用来描述数据库结构的Python类,它定义了数据库表的字段、类型以及各种关系。下面我们...

    Django上使用数据可视化利器Bokeh解析

    通过Python编写后端逻辑,利用Bokeh的强大功能生成交互式图表,最后将其嵌入Django模板,用户就能在浏览器中体验到丰富的数据可视化界面。这种方法简化了开发流程,降低了开发成本,特别适合需要处理大量数据并需要...

    django 1.8 polls 例子

    总结来说,Django 1.8的Polls示例是一个简单但全面的教程,涵盖了Web应用开发的基本要素,包括数据模型、视图、URL路由、模板以及数据库交互。通过学习和实践这个示例,开发者可以快速掌握Django的核心概念和工作...

    django简单的入门例子

    这个简单的Django入门例子展示了如何创建模型、视图、模板以及URL路由。通过实践这个例子,你可以了解到Django的基本工作流程,并为更复杂的Web应用打下基础。随着对Django的深入学习,你会发现它支持诸如用户认证、...

    基于Django+DRF实现的企业管理系统源码,前后端分离,前端Vue,后端Django

    1. **Django**: Django是Python中的一款高级Web开发框架,遵循模型-模板-视图(MTV)架构模式。它提供了强大的数据库交互能力、内置的ORM(对象关系映射)、URL路由系统、模板引擎以及表单处理功能。在这个项目中,...

    Django实现并发处理的例子

    接着,你需要定义视图(views)、模型(models)、模板(templates)和URL配置(urls),这些都是Django MVC架构的关键部分。 接下来,"调用自己模块中的函数"是指在Django应用中编写Python函数,这些函数可能包含...

Global site tag (gtag.js) - Google Analytics