大家得以应用 django-admin.py 来创造三个连串,本章大家将介绍Django 管理工科具及如何利用 Django

—苏醒内容先导—

Django框架使用,django框架

—苏醒内容开头—

Django 创设第3个品类

本章大家将介绍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

……省略部分……

创制第1个门类

使用 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: 1个实用的命令行工具,可让你以各类办法与该 Django
项目开始展览互动。

HelloWorld/__init__.py: 二个空文件,告诉 Python 该目录是3个 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让任何总结机可连日来到支付服务器,7000为端口号。借使不表明,那么端口号私下认可为8000。

 

在浏览器输入你服务器的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),

)

整个目录结构如下:

 

[[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!”。该办法将数据与视图混合在1齐,不符合Django的MVC思想。

 

本章节大家将为大家详细介绍 Django
模板的选择,模板是1个文件,用于分离文书档案的表现方式和故事情节。

 

模板应用实例

小编们随后上壹章节的类型将在 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宝马X3S 为[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 }}”。

 

再拜访访问http://192.168.45.3:8000/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 %} 允许大家在3个行列上迭代。

 

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

 

每2遍巡回中,模板系统会渲染在 {% 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%} 标签:八

 

{% ifequal section ‘sitenews’ %}

    <h1>Site News</h1>

{% else %}

    <h1>No News Here</h1>

{% endifequal %}

诠释标签

 

Django 注释使用 {# #}。

 

{# 那是3个注释 #}

过滤器

 

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

 

{{ name|lower }}

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

 

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

 

{{ my_list|first|upper }}

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

 

稍许过滤器有参数。 过滤器的参数跟随冒号之后同时总是以双引号包括。 例如:

 

{{ bio|truncatewords:”30″ }}

其一将突显变量 bio 的前二17个词。

 

别的过滤器:

 

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。

 

再度访问地址http://192.168.45.3:8000/hello/,输出结果如下:

 

 

 

 

 

 

 

Django 模型

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

 

Django 为这么些数据库提供了统1的调用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中对应数据库和用户的安装同1。Django根据那1装置,与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)、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中的INSE帕杰罗T:

 

# -*- 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 贰;

 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=壹的name字段,再save,约等于SQL中的UPDATE

 test1 = Test.objects.get(id=1)

 test一.name = ‘w三cschool菜鸟教程’

 test1.save()

 

 # 此外壹种方法

 #Test.objects.filter(id=一).update(name=’w3cschool菜鸟教程’)

 

 # 修改全数的列

 # Test.objects.all().update(name=’w三cschool菜鸟教程’)

 

 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
来成立项目,第3个品种我们以 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 该目录是2个 Python
包。

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

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

HelloWorld/wsgi.py: 1个 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 ! “)

随着,绑定 U翼虎L 与视图函数。打开 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 模板

在上1章节中大家运用 django.http.HttpResponse() 来输出”Hello
World!”。该格局将数据与视图混合在①块,不符合Django的MVC思想。

 

本章节我们将为我们详细介绍 Django
模板的行使,模板是3个文件,用于分离文书档案的表现情势和剧情。

 

模板应用实例

我们跟着上一章节的门类将在 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宝马7系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 }}”。

 

再拜访访问http://192.168.45.3:8000/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 %}
之间的拥有内容。

 

譬如,给定1个选手列表 athlete_list
变量,我们能够利用下边包车型客车代码来显示这么些列表:

 

 

 

<ul>

{% for athlete in athlete_list %}

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

{% endfor %}

</ul>

给标签增添3个 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 %} 标签相比较多少个值,当她们11分时,突显在 {% 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 的前2十多个词。

 

别的过滤器:

 

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。

 

双重访问地址http://192.168.45.3:8000/hello/,输出结果如下:

 

 

 

 

 

 

 

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)、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会自动抬高1个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中的INSE中华VT:

 

# -*- 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 二;

 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=一的name字段,再save,也正是SQL中的UPDATE

 test1 = Test.objects.get(id=1)

 test一.name = ‘w三cschool菜鸟教程’

 test1.save()

 

 # 其它壹种艺术

 #Test.objects.filter(id=1).update(name=’w3cschool菜鸟教程’)

 

 # 修改全部的列

 # Test.objects.all().update(name=’w三cschool菜鸟教程’)

 

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

—恢复生机内容甘休—

http://www.bkjia.com/Pythonjc/1233425.htmlwww.bkjia.comtruehttp://www.bkjia.com/Pythonjc/1233425.htmlTechArticleDjango框架使用,django框架 —恢复生机内容起头—
Django 创造第3个档次 本章大家将介绍Django 管理工科具及怎么样选择 Django
来创建项目,第1个项目…

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: 2个空文件,告诉 Python 该目录是3个 Python
包。

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

HelloWorld/urls.py: 该 Django 项目标 U酷威L 申明; 壹份由 Django
驱动的网址”目录”。

HelloWorld/wsgi.py: 二个 WSGI 包容的 Web
服务器的输入,以便运维你的类型。

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

 

python manage.py runserver 0.0.0.0:8000

0.0.0.0让别的计算机可连接到支付服务器,7000为端口号。假设不表明,那么端口号私下认可为九千。

 

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

 

 

 

视图和 URL 配置

在在此以前创制的 HelloWorld 目录下的 HelloWorld 目录新建多少个 view.py
文件,并输入代码:

 

from django.http import HttpResponse

 

def hello(request):

 return HttpResponse(“Hello world ! “)

随着,绑定 U奥迪Q7L 与视图函数。打开 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
模板的接纳,模板是3个文书,用于分离文书档案的表现格局和内容。

 

模板应用实例

咱们跟着上一章节的连串将在 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 中的 DIOdysseyS 为[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还选用了1个字典context作为参数。

 

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

 

再拜访访问http://192.168.45.3:8000/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%} 标签:八

 

{% 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。

 

再度访问地址http://192.168.45.3:8000/hello/,输出结果如下:

 

 

 

 

 

 

 

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会自动抬高3个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中的INSE库罗德T:

 

# -*- 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=一的name字段,再save,也正是SQL中的UPDATE

 test1 = Test.objects.get(id=1)

 test1.name = ‘w三cschool菜鸟教程’

 test1.save()

 

 # 其余1种艺术

 #Test.objects.filter(id=一).update(name=’w三cschool菜鸟教程’)

 

 # 修改全体的列

 # 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 来创立3个种类:

 

咱俩得以来看下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 该目录是3个 Python
包。

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

HelloWorld/urls.py: 该 Django 项目标 URAV4L 证明; 1份由 Django
驱动的网址”目录”。

HelloWorld/wsgi.py: 3个 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 ! “)

紧接着,绑定 UKugaL 与视图函数。打开 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,增添1个新的指标,用于向模板提交数据:

 

# -*- 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还利用了3个字典context作为参数。

 

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

 

再拜访访问http://192.168.45.3:8000/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是在每1个一定的轮回中应用的变量名称。

 

每一遍巡回中,模板系统会渲染在 {% 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 }}

上述实例将第3个因素并将其转化为大写。

 

稍许过滤器有参数。 过滤器的参数跟随冒号之后同时延续以双引号包涵。 例如:

 

{{ bio|truncatewords:”30″ }}

其1将显得变量 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。

 

再也访问地址http://192.168.45.3:8000/hello/,输出结果如下:

 

 

 

 

 

 

 

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依照那1设置,与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)、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中的INSE大切诺基T:

 

# -*- 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 二;

 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=一的name字段,再save,也就是SQL中的UPDATE

 test1 = Test.objects.get(id=1)

 test1.name = ‘w三cschool菜鸟教程’

 test1.save()

 

 # 其它1种办法

 #Test.objects.filter(id=1).update(name=’w三cschool菜鸟教程’)

 

 # 修改全部的列

 # Test.objects.all().update(name=’w三cschool菜鸟教程’)

 

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

—恢复生机内容截止—

相关文章