—恢复生机内容起先—

Django框架使用,django框架

—复苏内容伊始—

Django 创立第二个档期的顺序

本章大家将介绍Django 管理工科具及如何利用 Django
来创设项目,第一个类型大家以 HelloWorld 来命令项目。

 

Django 管理工科具

安装 Django 之后,您现在应当早已有了可用的管理工科具
django-admin.py。大家得以利用 django-admin.py 来创设一个品类:

 

大家得以来看下django-admin.py的吩咐介绍:

 

[[email protected]
~]# django-admin.py

Usage: django-admin.py subcommand [options] [args]

 

Options:

  -v VERBOSITY, –verbosity=VERBOSITY

                        Verbosity level; 0=minimal output, 1=normal
output,

                        2=verbose output, 3=very verbose output

  –settings=SETTINGS The Python path to a settings module, e.g.

                        “myproject.settings.main”. If this isn’t
provided, the

                        DJANGO_SETTINGS_MODULE environment variable
will be

                        used.

  –pythonpath=PYTHONPATH

                        A directory to add to the Python path, e.g.

                        “/home/djangoprojects/myproject”.

  –traceback Raise on exception

  –version show program’s version number and exit

  -h, –help show this help message and exit

 

Type ‘django-admin.py help <subcommand>’ for help on a specific
subcommand.

 

Available subcommands:

 

[django]

    check

    cleanup

    compilemessages

    createcachetable

……省略部分……

成立第贰个体系

使用 django-admin.py 来创建 HelloWorld 项目:

 

django-admin.py startproject HelloWorld

创建完毕后大家得以查看下项目标目录结构:

 

[[email protected]
~]# cd HelloWorld/

[[email protected]
HelloWorld]# tree

.

|– HelloWorld

| |– __init__.py

| |– settings.py

| |– urls.py

| `– wsgi.py

`– manage.py

目录表达:

 

HelloWorld: 项指标器皿。

manage.py: 叁个实用的命令行工具,可让你以种种情势与该 Django
项目实行相互。

HelloWorld/__init__.py: 一个空文件,告诉 Python 该目录是三个 Python
包。

HelloWorld/settings.py: 该 Django 项指标安装/配置。

HelloWorld/urls.py: 该 Django 项目标 UPAJEROL 申明; 一份由 Django
驱动的网址”目录”。

HelloWorld/wsgi.py: 二个 WSGI 包容的 Web
服务器的进口,以便运转你的等级次序。

接下去大家进去 HelloWorld 目录输入以下命令,运维服务器:

 

python manage.py runserver 0.0.0.0:8000

0.0.0.0让另外Computer可三番五次到支付服务器,柒仟为端口号。假如不表达,那么端口号暗中同意为八千。

 

在浏览器输入你服务器的ip及端口号,假若符合规律运转,输出结果如下:

 

 

 

视图和 URL 配置

在之前开创的 HelloWorld 目录下的 HelloWorld 目录新建八个 view.py
文件,并输入代码:

 

from django.http import HttpResponse

 

def hello(request):

 return HttpResponse(“Hello world ! “)

紧接着,绑定 ULacrosseL 与视图函数。打开 urls.py
文件,删除原本代码,将以下代码复制粘贴到 urls.py 文件中:

 

from django.conf.urls import *

from HelloWorld.view import hello

 

urlpatterns = patterns(“”,

 (‘^hello/$’, hello),

)

凡事目录结构如下:

 

[[email protected]
HelloWorld]# tree

.

|– HelloWorld

| |– __init__.py

| |– __init__.pyc

| |– settings.py

| |– settings.pyc

| |– urls.py # url 配置

| |– urls.pyc

| |– view.py # 增添的视图像和文字件

| |– view.pyc # 编写翻译后的视图像和文字件

| |– wsgi.py

| `– wsgi.pyc

`– manage.py

完了后,运转 Django 开辟服务器,并在浏览器访谈展开浏览器并拜访:

 

 

 

 

 

 

 

Django 模板

在上一章节中大家应用 django.http.HttpResponse() 来输出”Hello
World!”。该措施将数据与视图混合在一同,不切合Django的MVC思想。

 

本章节我们将为大家详细介绍 Django
模板的施用,模板是多个文本,用于分离文书档案的展现情势和情节。

 

模板应用实例

我们随后上一章节的类型将要 HelloWorld 目录底下成立 templates 目录并建构hello.html文件,整个目录结构如下:

 

HelloWorld/

|– HelloWorld

| |– __init__.py

| |– __init__.pyc

| |– settings.py

| |– settings.pyc

| |– urls.py

| |– urls.pyc

| |– view.py

| |– view.pyc

| |– wsgi.py

| `– wsgi.pyc

|– manage.py

`– templates

    `– hello.html

hello.html 文件代码如下:

 

<h1>{{ hello }}</h1>

从沙盘中大家通晓变量使用了双括号。

 

接下去我们须求向Django表明模板文件的路径,修改HelloWorld/settings.py,修改
TEMPLATES 中的 DI卡宴S 为[BASE_DIR+”/templates”,],如下所示:

 

TEMPLATES = [

    {

        ‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’,

        ‘DIRS’: [BASE_DIR+”/templates”,],

        ‘APP_DIRS’: True,

        ‘OPTIONS’: {

            ‘context_processors’: [

                ‘django.template.context_processors.debug’,

                ‘django.template.context_processors.request’,

                ‘django.contrib.auth.context_processors.auth’,

                ‘django.contrib.messages.context_processors.messages’,

            ],

        },

    },

]

小编们今后修改 view.py,扩充八个新的指标,用于向模板提交数据:

 

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

 

#from django.http import HttpResponse

from django.shortcuts import render

 

def hello(request):

    context = {}

    context[‘hello’] = ‘Hello World!’

    return render(request, ‘hello.html’, context)

能够看看,大家那边运用render来代替从前使用的HttpResponse。render还使用了二个字典context作为参数。

 

context 字典瓜月素的键值 “hello” 对应了模版中的变量 “{{ hello }}”。

 

再拜候访谈

 

 

 

如此那般我们就完了了利用模板来输出数据,进而完成多少与视图分离。

 

接下去大家将切实介绍模板中常用的语法则则。

 

Django 模板标签

if/else 标签

 

基本语法格式如下:

 

{% if condition %}

     … display

{% endif %}

或者:

 

{% if condition1 %}

   … display 1

{% elif condiiton2 %}

   … display 2

{% else %}

   … display 3

{% endif %}

听闻条件推断是还是不是输出。if/else 接济嵌套。

 

{% if %} 标签接受 and , or 可能 not 关键字来对五个变量做决断,只怕对变量取反( not ),举个例子:

 

{% if athlete_list and coach_list %}

     athletes 和 coaches 变量都以可用的。

{% endif %}

for 标签

 

{% for %} 允许大家在三个队列上迭代。

 

与Python的 for 语句的景色类似,循环语法是 for X in Y
,Y是要迭代的种类而X是在每四个一定的巡回中运用的变量名称。

 

每一次巡回中,模板系统会渲染在 {% for %} 和 {% endfor %}
之间的富有剧情。

 

比如,给定多个选手列表 athlete_list
变量,大家能够动用上面的代码来呈现那么些列表:

 

 

 

<ul>

{% for athlete in athlete_list %}

    <li>{{ athlete.name }}</li>

{% endfor %}

</ul>

给标签扩展三个 reversed 使得该列表被反向迭代:

 

{% for athlete in athlete_list reversed %}

{% endfor %}

能够嵌套使用 {% for %} 标签:

 

{% for athlete in athlete_list %}

    <h1>{{ athlete.name }}</h1>

    <ul>

    {% for sport in athlete.sports_played %}

        <li>{{ sport }}</li>

    {% endfor %}

    </ul>

{% endfor %}

ifequal/ifnotequal 标签

 

{% ifequal %} 标签相比多个值,当他们极度时,展现在 {% ifequal %} 和 {%
endifequal %} 之中全部的值。

 

上面包车型客车例子比较五个模板变量 user 和 currentuser :

 

{% ifequal user currentuser %}

    <h1>Welcome!</h1>

{% endifequal %}

和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签:8

 

{% ifequal section ‘sitenews’ %}

    <h1>Site News</h1>

{% else %}

    <h1>No News Here</h1>

{% endifequal %}

表明标签

 

Django 注释使用 {# #}。

 

{# 这是叁个注释 #}

过滤器

 

模板过滤器能够在变量被出示前修改它,过滤器使用管道字符,如下所示:

 

{{ name|lower }}

{{ name }} 变量被过滤器 lower 管理后,文档大写调换文本为小写。

 

过滤管道能够被* 套接*
,既是说,贰个过滤器管道的输出又能够看作下一个管道的输入:

 

{{ my_list|first|upper }}

以上实例将首先个因素并将其转化为大写。

 

稍稍过滤器有参数。 过滤器的参数跟随冒号之后还要总是以双引号包涵。 举个例子:

 

{{ bio|truncatewords:”30″ }}

以此将体现变量 bio 的前贰十几个词。

 

别的过滤器:

 

addslashes : 加多反斜杠到任何反斜杠、单引号可能双引号前面。

date : 按钦命的格式字符串参数格式化 date 大概 datetime 对象,实例:

{{ pub_date|date:”F j, Y” }}

length : 重回变量的尺寸。

include 标签

 

{% include %} 标签允许在模板中隐含别的的沙盘的剧情。

 

上边这五个例子都包含了 nav.html 模板:

 

{% include “nav.html” %}

模板承接

模板能够用三番五次的艺术来落到实处复用。

 

接下去我们先创立在此之前项目标 templates 目录中加多 base.html
文件,代码如下:

 

<html>

  <head>

    <title>Hello World!</title>

  </head>

 

  <body>

    <h1>Hello World!</h1>

    {% block mainbody %}

       <p>original</p>

    {% endblock %}

  </body>

</html>

以上代码中,名称为mainbody的block标签是能够被后世们替换掉的一部分。

 

富有的 {% block %} 标签告诉模板引擎,子模板能够重载这一个部分。

 

hello.html中三番五遍base.html,并替换特定block,hello.html修改后的代码如下:

 

{% extends “base.html” %}

 

{% block mainbody %}

<p>继承了 base.html 文件</p>

{% endblock %}

先是行代码表达hello.html承接了 base.html
文件。能够看出,这里同样名字的block标签用以替换base.html的呼应block。

 

重新访谈地址

 

 

 

 

 

 

 

Django 模型

Django
对种种数据库提供了很好的支撑,包蕴:PostgreSQL、MySQL、SQLite、Oracle。

 

Django 为那几个数据库提供了合併的调用API。
大家得以依赖本身事务须求选用区别的数据库。

 

MySQL 是 Web 应用中最常用的数据库。本章节大家将以 Mysql
作为实例进行介绍。你能够透过本站的 MySQL 教程 掌握更加的多Mysql的基础知识。

 

数据库配置

咱俩在档案的次序的 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)、Date菲尔德(也就是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)。

 

在意:即使大家一向不在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>”)

访问 就足以看来数据拉长成功的晋升。

 

获取数据

 

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>”)Django 创设第一个项目

本章大家将介绍Django 管理工科具及怎么着采用 Django
来创设项目,第1个种类大家以 HelloWorld 来命令项目。

 

Django 管理工科具

安装 Django 之后,您现在应有早已有了可用的管理工科具
django-admin.py。大家能够使用 django-admin.py 来创制三个连串:

 

咱俩得以来看下django-admin.py的授命介绍:

 

[[email protected]
~]# django-admin.py

Usage: django-admin.py subcommand [options] [args]

 

Options:

  -v VERBOSITY, –verbosity=VERBOSITY

                        Verbosity level; 0=minimal output, 1=normal
output,

                        2=verbose output, 3=very verbose output

  –settings=SETTINGS The Python path to a settings module, e.g.

                        “myproject.settings.main”. If this isn’t
provided, the

                        DJANGO_SETTINGS_MODULE environment variable
will be

                        used.

  –pythonpath=PYTHONPATH

                        A directory to add to the Python path, e.g.

                        “/home/djangoprojects/myproject”.

  –traceback Raise on exception

  –version show program’s version number and exit

  -h, –help show this help message and exit

 

Type ‘django-admin.py help <subcommand>’ for help on a specific
subcommand.

 

Available subcommands:

 

[django]

    check

    cleanup

    compilemessages

    createcachetable

……省略部分……

开创第三个档案的次序

使用 django-admin.py 来创建 HelloWorld 项目:

 

django-admin.py startproject HelloWorld

创办实现后大家能够查阅下项指标目录结构:

 

[[email protected]
~]# cd HelloWorld/

[[email protected]
HelloWorld]# tree

.

|– HelloWorld

| |– __init__.py

| |– settings.py

| |– urls.py

| `– wsgi.py

`– manage.py

目录表达:

 

HelloWorld: 项目标器皿。

manage.py: 贰个实用的命令行工具,可令你以各样法子与该 Django
项目开展互动。

HelloWorld/__init__.py: 叁个空文件,告诉 Python 该目录是三个 Python
包。

HelloWorld/settings.py: 该 Django 项指标设置/配置。

HelloWorld/urls.py: 该 Django 项指标 U昂CoraL 证明; 一份由 Django
驱动的网址”目录”。

HelloWorld/wsgi.py: 八个 WSGI 包容的 Web
服务器的输入,以便运营你的连串。

接下去大家走入 HelloWorld 目录输入以下命令,运转服务器:

 

python manage.py runserver 0.0.0.0:8000

0.0.0.0让别的计算机可总是到支付服务器,七千为端口号。若是不表明,那么端口号默感觉八千。

 

在浏览器输入你服务器的ip及端口号,要是符合规律运维,输出结果如下:

 

 

 

视图和 URL 配置

在原先开立的 HelloWorld 目录下的 HelloWorld 目录新建二个 view.py
文件,并输入代码:

 

from django.http import HttpResponse

 

def hello(request):

 return HttpResponse(“Hello world ! “)

跟着,绑定 UEnclaveL 与视图函数。打开 urls.py
文件,删除原来代码,将以下代码复制粘贴到 urls.py 文件中:

 

from django.conf.urls import *

from HelloWorld.view import hello

 

urlpatterns = patterns(“”,

 (‘^hello/$’, hello),

)

任何目录结构如下:

 

[[email protected]
HelloWorld]# tree

.

|– HelloWorld

| |– __init__.py

| |– __init__.pyc

| |– settings.py

| |– settings.pyc

| |– urls.py # url 配置

| |– urls.pyc

| |– view.py # 增多的视图像和文字件

| |– view.pyc # 编写翻译后的视图文件

| |– wsgi.py

| `– wsgi.pyc

`– manage.py

姣好后,运转 Django 开荒服务器,并在浏览器访问张开浏览器并访问:

 

 

 

 

 

 

 

Django 模板

在上一章节中大家利用 django.http.HttpResponse() 来输出”Hello
World!”。该格局将数据与视图混合在共同,不合乎Django的MVC观念。

 

本章节我们将为大家详细介绍 Django
模板的应用,模板是二个文件,用于分离文书档案的表现格局和内容。

 

模板应用实例

咱俩跟着上一章节的门类将在 HelloWorld 目录底下创造 templates 目录并创造hello.html文件,整个目录结构如下:

 

HelloWorld/

|– HelloWorld

| |– __init__.py

| |– __init__.pyc

| |– settings.py

| |– settings.pyc

| |– urls.py

| |– urls.pyc

| |– view.py

| |– view.pyc

| |– wsgi.py

| `– wsgi.pyc

|– manage.py

`– templates

    `– hello.html

hello.html 文件代码如下:

 

<h1>{{ hello }}</h1>

从沙盘中我们领悟变量使用了双括号。

 

接下去大家供给向Django表达模板文件的门径,修改HelloWorld/settings.py,修改
TEMPLATES 中的 DI纳瓦拉S 为[BASE_DIR+”/templates”,],如下所示:

 

TEMPLATES = [

    {

        ‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’,

        ‘DIRS’: [BASE_DIR+”/templates”,],

        ‘APP_DIRS’: True,

        ‘OPTIONS’: {

            ‘context_processors’: [

                ‘django.template.context_processors.debug’,

                ‘django.template.context_processors.request’,

                ‘django.contrib.auth.context_processors.auth’,

                ‘django.contrib.messages.context_processors.messages’,

            ],

        },

    },

]

咱俩明天涂改 view.py,扩张贰个新的靶子,用于向模板提交数据:

 

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

 

#from django.http import HttpResponse

from django.shortcuts import render

 

def hello(request):

    context = {}

    context[‘hello’] = ‘Hello World!’

    return render(request, ‘hello.html’, context)

能够看出,大家这里运用render来代替从前运用的HttpResponse。render还利用了三个字典context作为参数。

 

context 字典相月素的键值 “hello” 对应了模版中的变量 “{{ hello }}”。

 

再拜访访谈

 

 

 

像这种类型大家就造成了接纳模板来输出数据,进而完毕数据与视图分离。

 

接下去我们将具体介绍模板中常用的语法法规。

 

Django 模板标签

if/else 标签

 

基本语法格式如下:

 

{% if condition %}

     … display

{% endif %}

或者:

 

{% if condition1 %}

   … display 1

{% elif condiiton2 %}

   … display 2

{% else %}

   … display 3

{% endif %}

依照条件决断是不是输出。if/else 帮助嵌套。

 

{% if %} 标签接受 and , or 只怕 not 关键字来对五个变量做推断,也许对变量取反( not ),举例:

 

{% if athlete_list and coach_list %}

     athletes 和 coaches 变量都是可用的。

{% endif %}

for 标签

 

{% for %} 允许大家在贰个队列上迭代。

 

与Python的 for 语句的情事类似,循环语法是 for X in Y
,Y是要迭代的连串而X是在每五个特定的轮回中应用的变量名称。

 

每一回巡回中,模板系统会渲染在 {% for %} 和 {% endfor %}
之间的具有内容。

 

例如,给定一个选手列表 athlete_list
变量,大家得以接纳上边包车型大巴代码来呈现那些列表:

 

 

 

<ul>

{% for athlete in athlete_list %}

    <li>{{ athlete.name }}</li>

{% endfor %}

</ul>

给标签扩张一个 reversed 使得该列表被反向迭代:

 

{% for athlete in athlete_list reversed %}

{% endfor %}

能够嵌套使用 {% for %} 标签:

 

{% for athlete in athlete_list %}

    <h1>{{ athlete.name }}</h1>

    <ul>

    {% for sport in athlete.sports_played %}

        <li>{{ sport }}</li>

    {% endfor %}

    </ul>

{% endfor %}

ifequal/ifnotequal 标签

 

{% ifequal %} 标签比较三个值,当他们十二分时,显示在 {% ifequal %} 和 {%
endifequal %} 之中全数的值。

 

下边包车型的士例子比较五个模板变量 user 和 currentuser :

 

{% ifequal user currentuser %}

    <h1>Welcome!</h1>

{% endifequal %}

和 {% if %} 类似, {% ifequal %} 帮衬可选的 {% else%} 标签:8

 

{% ifequal section ‘sitenews’ %}

    <h1>Site News</h1>

{% else %}

    <h1>No News Here</h1>

{% endifequal %}

评释标签

 

Django 注释使用 {# #}。

 

{# 那是三个注释 #}

过滤器

 

模板过滤器能够在变量被呈现前修改它,过滤器使用管道字符,如下所示:

 

{{ name|lower }}

{{ name }} 变量被过滤器 lower 管理后,文书档案大写转变文本为小写。

 

过滤管道能够被* 套接*
,既是说,叁个过滤器管道的输出又能够当作下一个管道的输入:

 

{{ my_list|first|upper }}

以上实例将率先个要素并将其转化为大写。

 

稍加过滤器有参数。 过滤器的参数跟随冒号之后同不常间总是以双引号富含。 举个例子:

 

{{ bio|truncatewords:”30″ }}

本条将体现变量 bio 的前二二十多个词。

 

别的过滤器:

 

addslashes : 增加反斜杠到其余反斜杠、单引号可能双引号后边。

date : 按钦赐的格式字符串参数格式化 date 也许 datetime 对象,实例:

{{ pub_date|date:”F j, Y” }}

length : 重回变量的长短。

include 标签

 

{% include %} 标签允许在模板中含有其余的模版的开始和结果。

 

下边那多少个例证都饱含了 nav.html 模板:

 

{% include “nav.html” %}

模板承袭

模板可以用持续的不二等秘书籍来达成复用。

 

接下去大家先成立以前项目标 templates 目录中增多 base.html
文件,代码如下:

 

<html>

  <head>

    <title>Hello World!</title>

  </head>

 

  <body>

    <h1>Hello World!</h1>

    {% block mainbody %}

       <p>original</p>

    {% endblock %}

  </body>

</html>

如上代码中,名字为mainbody的block标签是足以被后世们替换掉的有的。

 

抱有的 {% block %} 标签告诉模板引擎,子模板能够重载这么些有个别。

 

hello.html中持续base.html,并替换特定block,hello.html修改后的代码如下:

 

{% extends “base.html” %}

 

{% block mainbody %}

<p>继承了 base.html 文件</p>

{% endblock %}

首先行代码表达hello.html承接了 base.html
文件。能够观看,这里一样名字的block标签用以替换base.html的呼应block。

 

重新访谈地址

 

 

 

 

 

 

 

Django 模型

Django
对各样数据库提供了很好的支撑,包罗:PostgreSQL、MySQL、SQLite、Oracle。

 

Django 为那个数据库提供了合併的调用API。
我们可以依据本人事务须要选拔不一样的数据库。

 

MySQL 是 Web 应用中最常用的数据库。本章节大家将以 Mysql
作为实例实行介绍。你能够透过本站的 MySQL 教程 了解更多Mysql的基础知识。

 

数据库配置

咱俩在档期的顺序的 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)。

 

瞩目:固然大家从不在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>”)

访问 就能够见见数据增加成功的升迁。

 

获取数据

 

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>”)

—恢复生机内容停止—

—复苏内容开端—
Django 创设第多个项目 本章大家将介绍Django 管理工科具及怎么着运用 Django
来创设项目,第一个项目…

Django 创造第一个连串

本章大家将介绍Django 管理工科具及如何采用 Django
来成立项目,第三个项目我们以 HelloWorld 来命令项目。

 

Django 管理工科具

设置 Django 之后,您今后应该已经有了可用的管理工科具
django-admin.py。大家得以行使 django-admin.py 来创设三个品种:

 

我们能够来看下django-admin.py的通令介绍:

 

[root@solar ~]# django-admin.py

Usage: django-admin.py subcommand [options] [args]

 

Options:

  -v VERBOSITY, –verbosity=VERBOSITY

                        Verbosity level; 0=minimal output, 1=normal
output,

                        2=verbose output, 3=very verbose output

  –settings=SETTINGS The Python path to a settings module, e.g.

                        “myproject.settings.main”. If this isn’t
provided, the

                        DJANGO_SETTINGS_MODULE environment variable
will be

                        used.

  –pythonpath=PYTHONPATH

                        A directory to add to the Python path, e.g.

                        “/home/djangoprojects/myproject”.

  –traceback Raise on exception

  –version show program’s version number and exit

  -h, –help show this help message and exit

 

Type ‘django-admin.py help <subcommand>’ for help on a specific
subcommand.

 

Available subcommands:

 

[django]

    check

    cleanup

    compilemessages

    createcachetable

……省略部分……

创制第三个门类

使用 django-admin.py 来创建 HelloWorld 项目:

 

django-admin.py startproject HelloWorld

创制完成后大家得以查看下项目标目录结构:

 

[root@solar ~]# cd HelloWorld/

[root@solar HelloWorld]# tree

.

|– HelloWorld

| |– __init__.py

| |– settings.py

| |– urls.py

| `– wsgi.py

`– manage.py

目录表达:

 

HelloWorld: 项目标器皿。

manage.py: 贰个实用的命令行工具,可令你以各类方式与该 Django
项目张开互动。

HelloWorld/__init__.py: 三个空文件,告诉 Python 该目录是三个 Python
包。

HelloWorld/settings.py: 该 Django 项指标安装/配置。

HelloWorld/urls.py: 该 Django 项指标 ULacrosseL 注解; 一份由 Django
驱动的网址”目录”。

HelloWorld/wsgi.py: 三个 WSGI 包容的 Web
服务器的进口,以便运营你的连串。

接下去大家进来 HelloWorld 目录输入以下命令,运营服务器:

 

python manage.py runserver 0.0.0.0:8000

0.0.0.0让别的Computer可连接到支付服务器,九千为端口号。假使不表达,那么端口号默以为7000。

 

在浏览器输入你服务器的ip及端口号,若是正常运营,输出结果如下:

 

 

 

视图和 URL 配置

在原先创立的 HelloWorld 目录下的 HelloWorld 目录新建八个 view.py
文件,并输入代码:

 

from django.http import HttpResponse

 

def hello(request):

 return HttpResponse(“Hello world ! “)

随之,绑定 U福特ExplorerL 与视图函数。打开 urls.py
文件,删除原本代码,将以下代码复制粘贴到 urls.py 文件中:

 

from django.conf.urls import *

from HelloWorld.view import hello

 

urlpatterns = patterns(“”,

 (‘^hello/$’, hello),

)

方方面面目录结构如下:

 

[root@solar HelloWorld]# tree

.

|– HelloWorld

| |– __init__.py

| |– __init__.pyc

| |– settings.py

| |– settings.pyc

| |– urls.py # url 配置

| |– urls.pyc

| |– view.py # 加多的视图像和文字件

| |– view.pyc # 编写翻译后的视图像和文字件

| |– wsgi.py

| `– wsgi.pyc

`– manage.py

姣好后,运行 Django 开辟服务器,并在浏览器访谈展开浏览器并访谈:

 

 

 

 

 

 

 

Django 模板

在上一章节中我们使用 django.http.HttpResponse() 来输出”Hello
World!”。该办法将数据与视图混合在联合,不适合Django的MVC观念。

 

本章节大家将为我们详细介绍 Django
模板的接纳,模板是三个文书,用于分离文书档案的表现情势和内容。

 

模板应用实例

大家跟着上一章节的门类就要 HelloWorld 目录底下创造 templates 目录并树立
hello.html文件,整个目录结构如下:

 

HelloWorld/

|– HelloWorld

| |– __init__.py

| |– __init__.pyc

| |– settings.py

| |– settings.pyc

| |– urls.py

| |– urls.pyc

| |– view.py

| |– view.pyc

| |– wsgi.py

| `– wsgi.pyc

|– manage.py

`– templates

    `– hello.html

hello.html 文件代码如下:

 

<h1>{{ hello }}</h1>

从沙盘中大家精通变量使用了双括号。

 

接下去大家必要向Django表明模板文件的不二等秘书技,修改HelloWorld/settings.py,修改
TEMPLATES 中的 DICR-VS 为[BASE_DIR+”/templates”,],如下所示:

 

TEMPLATES = [

    {

        ‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’,

        ‘DIRS’: [BASE_DIR+”/templates”,],

        ‘APP_DIRS’: True,

        ‘OPTIONS’: {

            ‘context_processors’: [

                ‘django.template.context_processors.debug’,

                ‘django.template.context_processors.request’,

                ‘django.contrib.auth.context_processors.auth’,

                ‘django.contrib.messages.context_processors.messages’,

            ],

        },

    },

]

我们前几天涂改 view.py,扩充二个新的靶子,用于向模板提交数据:

 

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

 

#from django.http import HttpResponse

from django.shortcuts import render

 

def hello(request):

    context = {}

    context[‘hello’] = ‘Hello World!’

    return render(request, ‘hello.html’, context)

能够看出,大家那边运用render来顶替在此之前使用的HttpResponse。render还动用了三个字典context作为参数。

 

context 字典八月素的键值 “hello” 对应了模版中的变量 “{{ hello }}”。

 

再拜访访谈

 

 

 

这么大家就大功告成了选用模板来输出数据,进而完成数量与视图分离。

 

接下去大家将现实介绍模板中常用的语法则则。

 

Django 模板标签

if/else 标签

 

基本语法格式如下:

 

{% if condition %}

     … display

{% endif %}

或者:

 

{% if condition1 %}

   … display 1

{% elif condiiton2 %}

   … display 2

{% else %}

   … display 3

{% endif %}

基于标准推断是或不是输出。if/else 帮忙嵌套。

 

{% if %} 标签接受 and , or 可能 not 关键字来对七个变量做决断,或许对变量取反( not ),举个例子:

 

{% if athlete_list and coach_list %}

     athletes 和 coaches 变量都以可用的。

{% endif %}

for 标签

 

{% for %} 允许大家在三个类别上迭代。

 

与Python的 for 语句的境况类似,循环语法是 for X in Y
,Y是要迭代的连串而X是在每一个一定的大循环中动用的变量名称。

 

每一回巡回中,模板系统会渲染在 {% for %} 和 {% endfor %}
之间的具备剧情。

 

举例说,给定一个选手列表 athlete_list
变量,我们能够使用上边包车型客车代码来展现那一个列表:

 

 

 

<ul>

{% for athlete in athlete_list %}

    <li>{{ athlete.name }}</li>

{% endfor %}

</ul>

给标签扩充一个 reversed 使得该列表被反向迭代:

 

{% for athlete in athlete_list reversed %}

{% endfor %}

能够嵌套使用 {% for %} 标签:

 

{% for athlete in athlete_list %}

    <h1>{{ athlete.name }}</h1>

    <ul>

    {% for sport in athlete.sports_played %}

        <li>{{ sport }}</li>

    {% endfor %}

    </ul>

{% endfor %}

ifequal/ifnotequal 标签

 

{% ifequal %} 标签相比多少个值,当他们万分时,呈现在 {% ifequal %} 和 {%
endifequal %} 之中全体的值。

 

上面包车型客车事例比较三个模板变量 user 和 currentuser :

 

{% ifequal user currentuser %}

    <h1>Welcome!</h1>

{% endifequal %}

和 {% if %} 类似, {% ifequal %} 辅助可选的 {% else%} 标签:8

 

{% ifequal section ‘sitenews’ %}

    <h1>Site News</h1>

{% else %}

    <h1>No News Here</h1>

{% endifequal %}

评释标签

 

Django 注释使用 {# #}。

 

{# 那是贰个注释 #}

过滤器

 

模板过滤器能够在变量被出示前修改它,过滤器使用管道字符,如下所示:

 

{{ name|lower }}

{{ name }} 变量被过滤器 lower 管理后,文书档案大写调换文本为小写。

 

过滤管道能够被* 套接*
,既是说,叁个过滤器管道的出口又有啥不可看作下三个管道的输入:

 

{{ my_list|first|upper }}

如上实例将第三个成分并将其转会为大写。

 

稍稍过滤器有参数。 过滤器的参数跟随冒号之后还要连接以双引号包括。 举例:

 

{{ bio|truncatewords:”30″ }}

以此将展现变量 bio 的前二十五个词。

 

其他过滤器:

 

addslashes : 增多反斜杠到其他反斜杠、单引号恐怕双引号前边。

date : 按钦赐的格式字符串参数格式化 date 也许 datetime 对象,实例:

{{ pub_date|date:”F j, Y” }}

length : 再次来到变量的长短。

include 标签

 

{% include %} 标签允许在模板中饱含其余的模版的源委。

 

上面那八个例证都富含了 nav.html 模板:

 

{% include “nav.html” %}

模板承袭

模板能够用持续的主意来兑现复用。

 

接下去大家先创立以前项目标 templates 目录中增添 base.html
文件,代码如下:

 

<html>

  <head>

    <title>Hello World!</title>

  </head>

 

  <body>

    <h1>Hello World!</h1>

    {% block mainbody %}

       <p>original</p>

    {% endblock %}

  </body>

</html>

如上代码中,名字为mainbody的block标签是足以被后世们替换掉的片段。

 

装有的 {% block %} 标签告诉模板引擎,子模板能够重载这么些部分。

 

hello.html中再而三base.html,并替换特定block,hello.html修改后的代码如下:

 

{% extends “base.html” %}

 

{% block mainbody %}

<p>继承了 base.html 文件</p>

{% endblock %}

第一行代码表达hello.html承袭了 base.html
文件。能够看到,这里同样名字的block标签用以替换base.html的呼应block。

 

重新访问地址

 

 

 

 

 

 

 

Django 模型

Django
对各个数据库提供了很好的支撑,富含:PostgreSQL、MySQL、SQLite、Oracle。

 

Django 为那个数据库提供了合併的调用API。
大家得以依据自身事务须要选用差别的数据库。

 

MySQL 是 Web 应用中最常用的数据库。本章节大家将以 Mysql
作为实例实行介绍。你能够通过本站的 MySQL 教程 通晓愈来愈多Mysql的基础知识。

 

数据库配置

我们在项目标 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),数据类型则由Char菲尔德(相当于varchar)、Date菲尔德(也正是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)。

 

小心:就算我们从不在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>”)

访问 就能够知见数据增加成功的提醒。

 

获取数据

 

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>”)Django 成立第叁个项目

本章大家将介绍Django 管理工科具及怎样使用 Django
来创设项目,第一个品类我们以 HelloWorld 来命令项目。

 

Django 管理工科具

设置 Django 之后,您今后应该已经有了可用的管理工科具
django-admin.py。大家得以应用 django-admin.py 来创设一个种类:

 

大家能够来看下django-admin.py的下令介绍:

 

[root@solar ~]# django-admin.py

Usage: django-admin.py subcommand [options] [args]

 

Options:

  -v VERBOSITY, –verbosity=VERBOSITY

                        Verbosity level; 0=minimal output, 1=normal
output,

                        2=verbose output, 3=very verbose output

  –settings=SETTINGS The Python path to a settings module, e.g.

                        “myproject.settings.main”. If this isn’t
provided, the

                        DJANGO_SETTINGS_MODULE environment variable
will be

                        used.

  –pythonpath=PYTHONPATH

                        A directory to add to the Python path, e.g.

                        “/home/djangoprojects/myproject”.

  –traceback Raise on exception

  –version show program’s version number and exit

  -h, –help show this help message and exit

 

Type ‘django-admin.py help <subcommand>’ for help on a specific
subcommand.

 

Available subcommands:

 

[django]

    check

    cleanup

    compilemessages

    createcachetable

……省略部分……

创设第多个种类

使用 django-admin.py 来创建 HelloWorld 项目:

 

django-admin.py startproject HelloWorld

始建完成后大家得以查看下项指标目录结构:

 

[root@solar ~]# cd HelloWorld/

[root@solar HelloWorld]# tree

.

|– HelloWorld

| |– __init__.py

| |– settings.py

| |– urls.py

| `– wsgi.py

`– manage.py

目录表明:

 

HelloWorld: 项目标容器。

manage.py: 三个实用的命令行工具,可令你以各个形式与该 Django
项目打开互动。

HelloWorld/__init__.py: 一个空文件,告诉 Python 该目录是二个 Python
包。

HelloWorld/settings.py: 该 Django 项目标安装/配置。

HelloWorld/urls.py: 该 Django 项目标 UENCOREL 表明; 一份由 Django
驱动的网址”目录”。

HelloWorld/wsgi.py: 三个 WSGI 包容的 Web
服务器的进口,以便运营你的品类。

接下去大家进来 HelloWorld 目录输入以下命令,运转服务器:

 

python manage.py runserver 0.0.0.0:8000

0.0.0.0让别的Computer可连接到支付服务器,7000为端口号。若是不表明,那么端口号默感觉九千。

 

在浏览器输入你服务器的ip及端口号,若无难题运维,输出结果如下:

 

 

 

视图和 URL 配置

在原先创建的 HelloWorld 目录下的 HelloWorld 目录新建一个 view.py
文件,并输入代码:

 

from django.http import HttpResponse

 

def hello(request):

 return HttpResponse(“Hello world ! “)

继之,绑定 U哈弗L 与视图函数。张开 urls.py
文件,删除原来代码,将以下代码复制粘贴到 urls.py 文件中:

 

from django.conf.urls import *

from HelloWorld.view import hello

 

urlpatterns = patterns(“”,

 (‘^hello/$’, hello),

)

全方位目录结构如下:

 

[root@solar HelloWorld]# tree

.

|– HelloWorld

| |– __init__.py

| |– __init__.pyc

| |– settings.py

| |– settings.pyc

| |– urls.py # url 配置

| |– urls.pyc

| |– view.py # 增加的视图像和文字件

| |– view.pyc # 编写翻译后的视图像和文字件

| |– wsgi.py

| `– wsgi.pyc

`– manage.py

成就后,运行 Django 开拓服务器,并在浏览器访问张开浏览器并访谈:

 

 

 

 

 

 

 

Django 模板

在上一章节中大家使用 django.http.HttpResponse() 来输出”Hello
World!”。该办法将数据与视图混合在一道,不适合Django的MVC观念。

 

本章节我们将为大家详细介绍 Django
模板的选择,模板是叁个文书,用于分离文书档案的表现方式和内容。

 

模板应用实例

我们跟着上一章节的项目就要 HelloWorld 目录底下创造 templates 目录并确立
hello.html文件,整个目录结构如下:

 

HelloWorld/

|– HelloWorld

| |– __init__.py

| |– __init__.pyc

| |– settings.py

| |– settings.pyc

| |– urls.py

| |– urls.pyc

| |– view.py

| |– view.pyc

| |– wsgi.py

| `– wsgi.pyc

|– manage.py

`– templates

    `– hello.html

hello.html 文件代码如下:

 

<h1>{{ hello }}</h1>

从沙盘中大家精通变量使用了双括号。

 

接下去我们要求向Django表达模板文件的门道,修改HelloWorld/settings.py,修改
TEMPLATES 中的 DI奇骏S 为[BASE_DIR+”/templates”,],如下所示:

 

TEMPLATES = [

    {

        ‘BACKEND’: ‘django.template.backends.django.DjangoTemplates’,

        ‘DIRS’: [BASE_DIR+”/templates”,],

        ‘APP_DIRS’: True,

        ‘OPTIONS’: {

            ‘context_processors’: [

                ‘django.template.context_processors.debug’,

                ‘django.template.context_processors.request’,

                ‘django.contrib.auth.context_processors.auth’,

                ‘django.contrib.messages.context_processors.messages’,

            ],

        },

    },

]

大家前几日修改 view.py,扩充贰个新的对象,用于向模板提交数据:

 

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

 

#from django.http import HttpResponse

from django.shortcuts import render

 

def hello(request):

    context = {}

    context[‘hello’] = ‘Hello World!’

    return render(request, ‘hello.html’, context)

能够阅览,大家这里运用render来取代在此以前运用的HttpResponse。render还使用了几个字典context作为参数。

 

context 字典巧月素的键值 “hello” 对应了模版中的变量 “{{ hello }}”。

 

再拜候访谈

 

 

 

如此那般我们就完了了运用模板来输出数据,进而完结多少与视图分离。

 

接下去大家将切实介绍模板中常用的语准则则。

 

Django 模板标签

if/else 标签

 

基本语法格式如下:

 

{% if condition %}

     … display

{% endif %}

或者:

 

{% if condition1 %}

   … display 1

{% elif condiiton2 %}

   … display 2

{% else %}

   … display 3

{% endif %}

据说条件决断是或不是输出。if/else 援助嵌套。

 

{% if %} 标签接受 and , or 大概 not 关键字来对五个变量做剖断,或然对变量取反( not ),譬喻:

 

{% if athlete_list and coach_list %}

     athletes 和 coaches 变量都是可用的。

{% endif %}

for 标签

 

{% for %} 允许大家在叁个队列上迭代。

 

与Python的 for 语句的情景类似,循环语法是 for X in Y
,Y是要迭代的系列而X是在每一个一定的循环中运用的变量名称。

 

每便巡回中,模板系统会渲染在 {% for %} 和 {% endfor %}
之间的富有剧情。

 

比如,给定一个选手列表 athlete_list
变量,大家能够动用下边包车型大巴代码来呈现这么些列表:

 

 

 

<ul>

{% for athlete in athlete_list %}

    <li>{{ athlete.name }}</li>

{% endfor %}

</ul>

给标签扩大多个 reversed 使得该列表被反向迭代:

 

{% for athlete in athlete_list reversed %}

{% endfor %}

能够嵌套使用 {% for %} 标签:

 

{% for athlete in athlete_list %}

    <h1>{{ athlete.name }}</h1>

    <ul>

    {% for sport in athlete.sports_played %}

        <li>{{ sport }}</li>

    {% endfor %}

    </ul>

{% endfor %}

ifequal/ifnotequal 标签

 

{% ifequal %} 标签比较三个值,当她们特别时,展现在 {% ifequal %} 和 {%
endifequal %} 之中全数的值。

 

下边包车型客车例证相比较四个模板变量 user 和 currentuser :

 

{% ifequal user currentuser %}

    <h1>Welcome!</h1>

{% endifequal %}

和 {% if %} 类似, {% ifequal %} 辅助可选的 {% else%} 标签:8

 

{% ifequal section ‘sitenews’ %}

    <h1>Site News</h1>

{% else %}

    <h1>No News Here</h1>

{% endifequal %}

评释标签

 

Django 注释使用 {# #}。

 

{# 那是一个注释 #}

过滤器

 

模板过滤器能够在变量被出示前修改它,过滤器使用管道字符,如下所示:

 

{{ name|lower }}

{{ name }} 变量被过滤器 lower 处理后,文书档案大写调换文本为小写。

 

过滤管道能够被* 套接*
,既是说,一个过滤器管道的出口又足以作为下三个管道的输入:

 

{{ my_list|first|upper }}

如上实例将率先个要素并将其转会为大写。

 

稍微过滤器有参数。 过滤器的参数跟随冒号之后还要总是以双引号包罗。 举例:

 

{{ bio|truncatewords:”30″ }}

这么些将展现变量 bio 的前三二十一个词。

 

别的过滤器:

 

addslashes : 增加反斜杠到其余反斜杠、单引号或许双引号前边。

date : 按钦定的格式字符串参数格式化 date 或然 datetime 对象,实例:

{{ pub_date|date:”F j, Y” }}

length : 重临变量的尺寸。

include 标签

 

{% include %} 标签允许在模板中含有其余的模版的源委。

 

下边那七个例证都包蕴了 nav.html 模板:

 

{% include “nav.html” %}

模板承继

模板可以用接二连三的措施来达成复用。

 

接下去我们先创立在此之前项目标 templates 目录中加多 base.html
文件,代码如下:

 

<html>

  <head>

    <title>Hello World!</title>

  </head>

 

  <body>

    <h1>Hello World!</h1>

    {% block mainbody %}

       <p>original</p>

    {% endblock %}

  </body>

</html>

如上代码中,名字为mainbody的block标签是能够被后世们替换掉的有的。

 

具有的 {% block %} 标签告诉模板引擎,子模板能够重载那么些部分。

 

hello.html中继续base.html,并替换特定block,hello.html修改后的代码如下:

 

{% extends “base.html” %}

 

{% block mainbody %}

<p>继承了 base.html 文件</p>

{% endblock %}

首先行代码表明hello.html承接了 base.html
文件。能够看出,这里一样名字的block标签用以替换base.html的应和block。

 

再也访谈地址

 

 

 

 

 

 

 

Django 模型

Django
对各类数据库提供了很好的协助,包罗:PostgreSQL、MySQL、SQLite、Oracle。

 

Django 为那几个数据库提供了合并的调用API。
大家能够依据本人事务供给采取分化的数据库。

 

MySQL 是 Web 应用中最常用的数据库。本章节我们将以 Mysql
作为实例进行介绍。你能够由此本站的 MySQL 教程 精晓更加多Mysql的基础知识。

 

数据库配置

大家在类型的 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)。

 

潜心:尽管大家尚无在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>”)

访问 就足以看出数据增进成功的提醒。

 

获取数据

 

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>”)

—复苏内容甘休—

相关文章