视图与网站,学习笔记之后台保管

1.先是成立Django工程

创造Django有二种艺术本人用的是pycharm的始建

亚洲必赢官网 1

 

亚洲必赢官网 2

封面.jpg

python Django教程 之 安装、基本命令、视图与网址,pythondjango

                  python  Django教程  之
安装、基本命令、视图与网站

2.查看url.py

如下

from django.contrib import admin
from django.urls import path

urlpatterns = [
    path('admin/', admin.site.urls),
]

标准化上没有需求更改它

题图:by spitze_meinaugenstern from Instagram

上文讲到通过命令落成数据的增加和删除改查,其实完全不用如此麻烦,django项目在创建的时候,系统活动帮忙创立了一个后台管理连串admin。还记得settings文件下INSTALLED_APPS数组中的第一个利用吗,’django.contrib.admin’,这些正是后台管理种类。

一、简介

Django
中提供了支出网址日常应用的模块,常见的代码都为你写好了,通过削消脂复的代码,Django
使您可见专注于 web 应用上有 趣的大旨的事物。为了达到那些目的,Django
提供了通用Web开辟情势的中度抽象,提供了反复举办的编程作业的长足消除情势,以及为“怎么样减轻难题”提供了清晰明了的预订。Django的观点是D安德拉Y(Don’t
Repeat Yourself)来鼓励飞快支付!

 

3.创建app

率先展开终端Terminal输入

python manage.py startapp cmdb     #cmdb为app名

下一场按一下刷新开关

亚洲必赢官网 3

Django3下会现出cmdb文件夹

其剧情如下

亚洲必赢官网 4

 

正文是 Django 学习笔记类别的第八篇。前边 陆 篇小说,大家曾经明白了 Django
MTV模型中两个层的始末。那有的内容算是最基础,也是最重大。本文的内容绝对简单,阅读起来会相比轻松些。主假使介绍下
Django 私下认可管理后台以及部分实用后台管理种类的第二方使用。

起步项目,然后张开1二七.0.0.一:7000/admin/,会张开以下界面:

让大家一览 Django 全貌

4.配置settings

开发settings文件找到 INSTALLED_应用程式S并作如下改动

亚洲必赢官网 5

 

1 前言

各种网址无论大小,大型电商网址也好,个人博客也罢,它们都是贰个管理后台。管理后台可以当做四个窗口,管理员通过它来处理以及保证网址。
Django
作为二个全能型的框架,当然也自带了三个后台处理类别。登入后台管理希望能对前者可能数据库数据举办充实、修改、删除等职业。大家前天就感动该系统来上学。

1.png

urls.py

网站入口,关联到相应的views.py中的叁个函数(恐怕generic类),访问网站就相应三个函数。

5.modles文本加多内容

from django.db import models
class UserType(models.Model):
    name = models.CharField(max_length=32)
class UserInfo(models.Model):
    username = models.CharField(max_length=32)
    passwd = models.CharField(max_length=32)
    email = models.EmailField(db_index=True)
    user_type = models.ForeignKey(UserType,on_delete=models.CASCADE)  #有外键时要注意on_delete的使用

2 激活管理分界面

实际 Django 默许帮我们激活 admin 管理后台。不知你还记得上次的操作?
当新建成立应用的,须求将刚创制的 app 参预到 setting.py 文件中。在
setting.py 文件中,你会看到眼下有广大行使。

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'demo',  # 我们新创建的 app
]

其中 django.contrib.admin 便是管理后台。因而,大家能够清楚 admin
其实也是一个利用,只然则它是 Django 自带的。

咱们只供给做一件事,那正是创办用户。在品种目录下,伸开终端,施行以下命令来成立一流管理员。

python manage.py createsuperuser

张开终端之后,依次输入用户名,邮箱和密码就可以创造。成功创制换管理员结果如下:

亚洲必赢官网 6

点击查阅大图

Django 在密码校验这块做的还不易。笔者使用弱密码 ‘admin’和’123467八’,Django
都不让笔者经过。

成功创造超级用户之后,使用浏览器访问后台管理系列:
127.0.0.1:8000/admin

亚洲必赢官网 7

点击查看大图

输入用户名和密码并进行登入,会看到以下分界面。因为是空项目,所以并未有数量,唯有展现用户账号的新闻。你能够对
admin 进行一次开荒,那样您就会在后台对数据库数据进行操作。

亚洲必赢官网 8

点击查阅大图

您会蛋疼滴开采不精晓账号密码,不要急,大家来创立3个账号,张开终端应用manage.py的createsuperuser命令创立贰个用户:

views.py

处理用户发生的央浼,从urls.py中对应恢复生机,
通过渲染templates中的网页能够将显得内容,比方登录后的用户名,用户请求的数目,输出到网页。

陆.同台全部的数据表

#在终端上依次输入如下代码:
python manage.py makemigrations

python manage.py migrate

3 常用的 admin 应用

自身推荐那多少个使用都是第3方开源项目,都辅助 Django 二.0
版本。具体安装方式能够翻阅种种插件的 Github 仓库地址。

  1. Xadmin
    Xadmin 在 Django
    后台管理种类应用库中算是信誉显赫。它终究一款内置效用相比较丰富的框架,提供了中央的CRUD效率,还停放了充分的插件效率;还包蕴数据导出、书签、图表、数据增进向导及图片相册等各个恢弘成效。
    最要紧的是,它接纳起来非凡便宜。大家只须要定义数据的字段等新闻,就可以获取多少个效应健全的军事管制种类。
    推荐指数:伍 星
    github
    地址

  1. django-grappelli
    django-grappelli
    能够算是1个成效庞大的利用。它应用网格状的花样来显示数据,那一个给人精简大方的痛感。因而,django-grappelli
    越发切合须要对数据频仍操作的现象。
    引入指数:肆 星
    github
    地址

  2. django-material
    django-material 是接纳谷歌(谷歌(Google)) Material Design 来设置 UI 。自身相比较欣赏
    MD 那种风格的分界面,所以推举给大家。
    引入指数:3 星半
    github
    地址

  3. django-admin-bootstrap
    django-admin-bootstrap
    是3个能自动隐藏侧面菜单栏的响应式管理后台。它跟 Xadmin
    同样,都以根据 bootstrap
    开采的。个人以为相比较符合初专家来学习和钻研。
    推荐指数:3 星
    github
    地址

2.png

models.py

与数据库操作相关,存入或读取数据时用到这几个,当然用不到数据库的时候
你能够不选择。

7.成立管理员

python manage.py createsuperuser

安分守纪提醒输入就可以

四 写在结尾

本人新建三个 Python Web 学习沟通 QQ
群,群号:70153411贰。接待我们加群,一齐调换,一同念书,一齐发展。

亚洲必赢官网 9

Python Web 学习沟通群


往前 Django 学习笔记小说
Django 学习笔记之情况搭建
Django 学习笔记之开首
Django
学习笔记之视图与U中华VL配置
Django 学习笔记之模板
Django 学习笔记之模型(上)
Django 学习笔记之模型(下)


本文原创发表于微信公众号「极客猴」,迎接关心第权且间获取越来越多原创分享

急需您输入用户名、邮箱、密码,会唤醒您用系统的用户名。我们在这里开创了1个叫yucanghai(别纠结那么些)的账号,在后台页面输入账号密码:

forms.py

表单,用户在浏览器上输入数据交到,对数据的认证工作以及输入框的成形等工作,当然你也能够不选取。

8.更改adim.py文件

输入以下代码

from django.contrib import admin

from cmdb import models
admin.site.register(models.UserType)
admin.site.register(models.UserInfo)

3.png

templates 文件夹

views.py
中的函数渲染templates中的Html模板,得到动态内容的网页,当然能够用缓存来增加速度。

玖.展开服务器

极限输入

python manage.py runserver

访问 可看出以下登入界面

亚洲必赢官网 10

 

输入精确用户和密码(既是你创设的领队用户密码)就能够看出如下分界面,之后您可以对数码进行各类操作

亚洲必赢官网 11

诸如此类总结的Django后台管理成立好了

行吗,全体是英文的,笔者相信您看得懂,但要么感觉难熬,那咱们把它改成汉语吧,打开系统的settings.py文件,找到

admin.py

后台,能够用很微量的代码就有着三个强硬的后台。

# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

settings.py

Django 的设置,配置文件,比如 DEBUG 的按钮,静态文件的岗位等。

 

二、安装

在安装Django在此以前,系统上必须已经安装了Python,至于哪些设置Python,这里就不多讲了

设置好Python之后,建议安装easy_install,那样直接行职务令easy_install
django就能够下载最新版本,相当便利。

视图与网站,学习笔记之后台保管。留意:以下办法中别的一种办法安装都可,不用每一个都试三次。

别的 建议活动安装 bpython,这样在用起来会爽好多。进入终极的时候输入
bpython 能够有提示。当然也得以选取用 ipython

一. 用 pip 来安装

贰.壹 必要先安装pip

(1). ubuntu: 

sudo apt-get install python-pip

(2). RedHat

yum install python-pip

(三). Linux, Mac OSX, Windows 下都可用 get-pip.py 来安装
pip: 

大概直接下载:get-pip.py 然后运营在顶峰运营 python get-pip.py
就足以设置 pip。

Note: 也能够下载 pip 源码包,运转 python setup.py install 实行安装

2.2 利用 pip 安装 Django

(sudo) pip install Django 或者 (sudo) pip install Django==1.6.10 或者 pip install Django==1.7.6

万1想提高 pip 能够用:

(sudo) pip install --upgrade pip

Windows 用户不用加
sudo,假若提示 ‘python’不是内部或外部命令,也不是可运转的先后或批管理文件。

那表达你的 Python
未有安装好,也许情形变量未有配置不错,最简便的主意是安装新本子的 Python
二.七.玖, 里面集成了 pip,安装时要勾选上意况变量那2个

亚洲必赢官网 12

 

二. 下载源码安装

一旦是源码包, 例如 django-1.7.陆.tar.gz

3.1 Linux 或 Mac 下

tar -xvzf django-1.7.6.tar.gz
cd django-1.7.6
(sudo) python setup.py install

3.2 Windows 下

直接用解压软件解压,然后到命令行(XP/Win⑦点击开始,在底下的不行输入框中输入
cmd, Win8在起来这里点右键,采纳命令行)

比如在 D:\django-1.7.6\  那些文件夹下

cd D:
cd django-1.7.6
python setup.py install

什么?提示 ‘python’不是内部或外部命令,也不是可运转的先后或批管理文件。

那表达您的 Python 未有设置好,只怕路线未有布署不错

 

 Linux用自带源进行安装

1.1  ubuntu 下安装 Django

sudo apt-get install python-django -y

一.二  redhat 下安装用 yum

yum install python-django

注意:自带源安装的 Django 一般版本比较旧,而用 pip
能够设置新型的本子。

将LANGUAGE_CODE改一下就可以

二. 反省是或不是安装成功

终极上输入 python ,点击 Enter,进行 python 情形

1 >>> import django
2 >>> django.VERSION
3 (1, 7, 6, 'final', 0)
4 >>> 
5 >>> django.get_version()
6 '1.7.6'

万一运转后见到版本号,就证实安装成功了!

 

# Internationalization
# https://docs.djangoproject.com/en/1.11/topics/i18n/

LANGUAGE_CODE = 'zh-hans'

TIME_ZONE = 'UTC'

USE_I18N = True

USE_L10N = True

USE_TZ = True

三. 恢弘:搭建多少个互不困扰的开销处境

咱俩有的时候会开采,四个处理器上有八个门类,二个依附 Django
壹.8,另三个相比较旧的类型又要用 Django 一.五,这时候怎么办呢?

咱们必要三个依赖包管理的工具来拍卖区别的境况。

万1不想搭建这么些条件,只想用某1个版本的 Django
也能够,可是推荐学习此内容!

再刷新一下后台页面,分界面就改为汉语了。此时后高雄并未看到大家创制article相关的剧情,那是因为大家须求在blog应用下的admin.py文件少校models中的内容注册一下:

3.一 景况搭建

开采会用 virtualenv 来治本多少个开辟景况,virtualenvwrapper
使得virtualenv变得越来越好用

# 安装:
(sudo) pip install virtualenv virtualenvwrapper

Linux/Mac OSX 下:

修改~/.bash_profile或任何境况变量相关文件(如 .bashrc 或用 ZSH 之后的
.zshrc),增多以下语句

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/workspace
source /usr/local/bin/virtualenvwrapper.sh

修改后使之登时生效(也得以重启终端使之生效):

source ~/.bash_profile

Windows 下:

pip install virtualenvwrapper-win

可选】Windows下私下认可虚拟情形是位于用户名上面包车型大巴Envs中的,与桌面,笔者的文书档案,下载等文件夹在一块的。改动方法:计算机,属性,高档系统设置,意况变量,增多WORubiconKON_HOME,如图(windows
10 境遇变量设置截图):

亚洲必赢官网 13

from django.contrib import admin
from .models import Article


admin.site.register(Article)

三.二 使用格局:

mkvirtualenv zqxt:创造运维条件zqxt

workon zqxt: 职业在 zqxt 情形 或 从其它境况切换成 zqxt 意况

deactivate: 退出终端意况

 

其它的:

rmvirtualenv ENV:删除运行情况ENV

mkproject mic:创立mic项目和平运动转条件mic

mktmpenv:成立一时半刻运转条件

lsvirtualenv: 列出可用的运维条件

lssitepackages: 列出当下条件设置了的包

始建的条件是独立的,互不苦恼,无需sudo权限就能够使用 pip 来进行李包裹的管理。

 

 叁、Django 基本命令 

再刷新一下后台的分界面,美妙的一幕爆发了:

1. 新建叁个 django project

django-admin startproject project-name

一个 project 为3个体系,project-name
项目名称,改成你和睦的,要适合Python
的变量命名规则(以下划线或字母开始)

4.png

2. 新建 app

python manage.py startapp app-name
或 django-admin.py startapp app-name

一般三个品种有八个app, 当然通用的app也得以在多少个种类中使用。

顶部多了三个Articles的保管模块,你能够点进入看一下,可以完成其增加和删除改查。

三. 手拉手数据库

python manage.py syncdb

注意:Django 1.7.1及以上的版本需要用以下命令
python manage.py makemigrations
python manage.py migrate

那种办法能够创立表,当你在models.py中新扩展了类时,运维它就足以活动在数据库中成立表了,不用手动创立。

备注:对已部分 models 进行修改,Django
一.7事先的本子的Django都以无力回天活动更动表结构的,但是有第2方工具
south,详见 Django 数据库迁移 壹节。

5.png

4. 用到支付服务器

支付服务器,即开辟时选择,一般修改代码后会自动重启,方便调节和测试和开拓,不过由于质量难点,提出只用来测试,不要用在生育景况。

python manage.py runserver

# 当提示端口被占用的时候,可以用其它端口:
python manage.py runserver 8001
python manage.py runserver 9999
(当然也可以kill掉占用端口的进程)

# 监听所有可用 ip (电脑可能有一个或多个内网ip,一个或多个外网ip,即有多个ip地址)
python manage.py runserver 0.0.0.0:8000
# 如果是外网或者局域网电脑上可以用其它电脑查看开发服务器
# 访问对应的 ip加端口,比如 http://172.16.20.2:8000

列表上标题Article
object是怎么鬼?那必然是django将1个目标直接回到到列表了,照旧将那个目的的标题展现出来,大家回到blog下models.py文件中,扩展1个办法,如下:

5. 清空数据库

python manage.py flush

此命令会询问是 yes 依然 no, 采取 yes 会把多少总体清空掉,只留下空表。

from django.db import models
from django.contrib.auth.models import User


class Article(models.Model):

    title = models.CharField(max_length=32, default='')

    # 文章正文,使用的是TextField
    # 存储比较短的字符串可以使用 CharField,但对于文章的正文来说可能会是一大段文本,因此使用 TextField 来存储大段文本。
    content = models.TextField(null=True)

    def __str__(self):
        return self.title

陆. 创制一级管理员

python manage.py createsuperuser

# 按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填

# 修改 用户密码可以用:
python manage.py changepassword username

再刷新一下分界面,列表上就展现了稿子的题目了

7. 导出数据 导入数据

python manage.py dumpdata appname > appname.json
python manage.py loaddata appname.json

至于数据操作
详见后边数据导入和数据迁移内容,现在询问有其一用法就足以了。

6.png

八. Django 项目条件终端

python manage.py shell

借使您安装了 bpython 或 ipython 会自动用它们的分界面,推荐安装 bpython。

以此命令和 间接运维 python 或 bpython 进入 shell 的界别是:你能够在那几个shell 里面调用当前项目标 models.py 中的
API,对于操作数据,还有一部分小测试极度有利。

九. 多少库命令行

python manage.py dbshell

Django 会自动进入在settings.py中装置的数据库,要是是 MySQL 或
postgreSQL,会要求输入数据库用户密码。

在这些终端能够进行数据库的SQL语句。要是你对SQL比较领会,或许喜欢那种格局。

10. 越多命令

终端上输入 python manage.py 可以看出详细的列表,在忘记子名称的时候尤其有用。

 

4、Django 视图与网址

四.一 首先,新建三个档期的顺序(project), 名称叫mysite

django-admin startproject mysite

备注:

  1. 如果 django-admin 不行,请用 django-admin.py

  2. 假定是在Linux是用源码安装的,也许用 pip 安装的,也是用
     django-admin.py 命令

亚洲必赢官网 14

运维后,要是成功的话, 大家会看出如下的目录样式  

1 mysite
2 ├── manage.py
3 └── mysite
4     ├── __init__.py
5     ├── settings.py
6     ├── urls.py
7     └── wsgi.py

我们会发掘实行命令后,新建了二个 mysite 目录,在那之中还有3个 mysite 目录,那一个子目录
mysite
中是局地档次的安装settings.py 文件,总的urls配置文件 urls.py 以及安插服务器时用到的 wsgi.py 文件, __init__.py 是python包的目录结构必须的,与调用有关。

大家到外围那一个 mysite 目录下(不是mysite中的mysite目录)

 

四.二新建3个选用(app), 名叫 learn

python manage.py startapp learn # learn 是一个app的名称

作者们能够看到mysite中多少个多个 learn 文件夹,当中有以下文件。

1 learn/
2 ├── __init__.py
3 ├── admin.py
4 ├── models.py
5 ├── tests.py
6 └── views.py

注:Django 一.八.x 以上的,还有二个 migrations 文件夹。Django 一.玖.x
还会在 Django 一.8 的根底上多出三个 apps.py
文件。不过这个都与本文非亲非故。

 

把大家新定义的app加到settings.py中的INSTALL_APPS中

修改 mysite/mysite/settings.py

INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'learn',
)

备注,这一步是怎么呢? 新建的 app 借使不加到 INSTALL_APPS 中的话,
django
就无法自动找到app中的模板文件(app-name/templates/下的公文)和静态文件(app-name/static/中的文件)
, 后边你会学习到它们分别用来干什么.

概念视图函数(访问页面时的始末)

我们在learn这么些目录中,把views.py打开,修改当中的源代码,改成上边包车型客车

#coding:utf-8
from django.http import HttpResponse

def index(request):
    return HttpResponse(u"Hello World!")

第一行是声称编码为utf-8, 因为我们在代码中用到了国文,如若不声明就报错.

其次行引进HttpResponse,它是用来向网页重回内容的,就如Python中的 print
同样,只不过 HttpResponse 是把内容显示到网页上。

咱俩定义了1个index()函数,第四个参数必须是 request,与网页发来的请求有关,request
变量里面蕴含getpost的始末,用户浏览器,系统等新闻在中间(前面会讲,先明白一下就足以)。

函数重临了二个 HttpResponse
对象,能够通过一些管理,最后突显多少个字到网页上。

那难点来了,我们走访什么网站技能来看刚才写的那个函数呢?怎么让网站和函数关联起来吧?

概念视图函数相关的UKoleosL(网站)  (即分明 访问什么网站对应如何内容)

大家展开 mysite/mysite/urls.py 这一个文件, 修改在那之中的代码:

注:由于 Django 版本对 urls.py 举行了部分改变

Django 1.7.x 及以下的校友只怕看到的是那样的:

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

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    url(r'^$', 'learn.views.index'),  # new
    # url(r'^blog/', include('blog.urls')),

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

Django 一.8.x及以上,Django 官方鼓励(或说须求)先引进,再利用:

 

from django.conf.urls import url
from django.contrib import admin
from learn import views as learn_views  # new

urlpatterns = [
    url(r'^$', learn_views.index),  # new
    url(r'^admin/', admin.site.urls),
]

以上都修改并保留后,大家来看一下效应!

 

 

在巅峰上运转 python manage.py runserver 咱俩会看到类似上边包车型客车新闻:

$ python manage.py runserver

Performing system checks...

System check identified no issues (0 silenced).

You have unapplied migrations; your app may not work properly until they are applied.
Run 'python manage.py migrate' to apply them.

December 22, 2015 - 11:57:33
Django version 1.9, using settings 'mysite.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.

我们张开浏览器,访问 

 

不出意料的话会看出:

 亚洲必赢官网 15

注意:万1是在另一台Computer上访问要用 python manage.py ip:port
的款式,例如监听全部ip:

python manage.py runserver 0.0.0.0:8000

监听机器上所有ip 8000端口,访问时用电脑的ip代替 127.0.0.1

Django中的 urls.py
用的是正则实行相称的,假设面生,您能够学习正则表达式以及Python正则表明式。

 

伍、Django 视图与网站进阶

5.壹在网页上做加减法

 

5.1.1  采用 /add/?a=4&b=5 这么GET方法开始展览

django-admin.py startproject zqxt_views
cd zqxt_views
python manage.py startapp calc

自动生成目录差不离如下(因分化的 Django
版本有一些差异,如若距离与那篇文章相关,笔者会积极建议来,没有说的,临时能够忽略他们中间的歧异,前边的教程也是那般做):

zqxt_views/
├── calc
│   ├── __init__.py
│   ├── admin.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── manage.py
└── zqxt_views
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py

我们修改一下 calc/views.py文件

from django.shortcuts import render
from django.http import HttpResponse

def add(request):
    a = request.GET['a']
    b = request.GET['b']
    c = int(a)+int(b)
    return HttpResponse(str(c))

注:request.GET 类似于3个字典,更加好的办法是用 request.GET.get(‘a’,
0) 当未有传递 a 的时候暗中认可 a 为 0

紧接着修改 zqxt_views/urls.py 文件,增多二个网站来对应大家刚刚新建的视图函数。

Django 一.7.x 及以下的校友只怕看到的是这般的:

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

from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    # Examples:
    url(r'^add/$', 'calc.views.add', name='add'), # 注意修改了这一行
    # url(r'^blog/', include('blog.urls')),

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

Django 壹.八.x及以上,Django 官方鼓励(或说须求)先引进,再使用,低版本的
Django 也能够那样用:

from django.conf.urls import url
from django.contrib import admin
from calc import views as calc_views


urlpatterns = [
    url(r'^add/', calc_views.add, name='add'),  # 注意修改了这一行
    url(r'^admin/', admin.site.urls),
]

笔者们开采开辟服务器并走访

python manage.py runserver
如果提示 Error: That port is already in use.在后面加上端口号8001,8888等
python manage.py runserver 8001

开发网站: 即可知到

亚洲必赢官网 16

那是因为我们并未传值进去,大家在后头加上 ?a=4&b=5,即访问 

就能够见见网页上显得八个 九,试着改动一下a和b对应的值试试看?

亚洲必赢官网 17

亚洲必赢官网 18

伍.一.贰 采取 /add/百分之七拾伍/ 那样的网站的法子

前边介绍的时候就说过 Django 匡助优雅的网站

我们跟着修改 calc/views.py文本,再新定义三个add2函数,原有部分不再贴出

def add2(request, a, b):
    c = int(a) + int(b)
    return HttpResponse(str(c))

继而修改 zqxt_views/urls.py 文件,再增加一个新的 url

Django 1.7.x 及以下:

url(r'^add/(\d+)/(\d+)/$', 'calc.views.add2', name='add2'),

Django 1.8.x 及以上:

 url(r'^add/(\d+)/(\d+)/$', calc_views.add2, name='add2'),

我们能够看来网站中多了 (\d+), 正则表达式中 \d 代表一个数字,+
代表多少个或七个后面包车型地铁字符,写在一块儿 \d+
正是一个或多少个数字,用括号括起来的意味是保留为二个子组(更多学问请参见 Python
正则表达式),每三个子组将作为3个参数,被 views.py
中的对应视图函数接收

大家再拜访  就足以看到和刚刚一律的职能,不过那回网站更优雅了

亚洲必赢官网 19

5.2 url 中的 name [技巧进步]

我们还有刚刚的代码,再来看一下 urls.py 中的代码(注意:第3条改成了 add2)

 

from django.conf.urls import url
from django.contrib import admin
from calc import views as calc_views


urlpatterns = [
    url(r'^add/', calc_views.add, name='add'),
    url(r'^add2/(\d+)/(\d+)/$', calc_views.add2, name='add2'),
    url(r'^admin/', admin.site.urls),
]

url(r’^add/$’, calc_views.add, name=’add’),
这里的 name=’add’ 是用来干什么的呢?

咱俩在支付的时候,刚开头想用的是 /add2/百分之八十/
后来需要发生变化,比方大家又想改成
/4_亚洲必赢官网,add_5/那样的格式,然则大家在网页中,代码中众多地点都写死的是 

<a href="/add2/4/5/">计算 4+5</a>

那么有未有更优雅的点子来解决这一个主题材料啊?自然答案是迟早的。

咱俩先说一下什么用 Python 代码获取相应的网站:

作者们在巅峰上输入(推荐安装 bpython, 那样Django会用 bpython的 shell)

C:\Users\Administrator\Desktop\文档\day17\zqxt_views>python3.5 manage.py shell                                                                                                                                    
Python 3.5.1 (v3.5.1:37a07cee5969, Dec  6 2015, 01:38:48) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)

>>> from django.core.urlresolvers import reverse
>>> reverse('add2', args=(4,5))
'/add/4/5/'
>>> reverse('add2', args=(444,555))
'/add/444/555/'
>>>

reverse 接收 url 中的 name 作为第二个参数,大家在代码中就可以透过
reverse()
来获得相应的网站(那么些网站能够用来跳转,也足以用来测算有关页面包车型大巴地方),只要对应的
url 的name不改,就无须改代码中的网站。

在网页模板中也是同样,能够很有益的应用。

不带参数的:
{% url 'name' %}
带参数的:参数可以是变量名
{% url 'name' 参数 %}

例如:
<a href="{% url 'add2' 4 5 %}">link</a>

地点的代码渲染成最终的页面是

<a href="/add2/4/5/">link</a>

这样就能够因此 {% url ‘add二’ 肆 ⑤ %} 获取到相应的网站 /add2/十分八/

当 urls.py 举行改动,前提是不改
name(这几个参数设定好后不用随便改),获取的网站也会动态地跟着变,比方改成:

url(r'^new_add/(\d+)/(\d+)/$', 'calc.views.add2', name='add2'),

注意看首要 add2 改成了 new_add,可是前面包车型客车 name=’add贰’
没改,那时 {% url ‘add二’ 4 5 %} 就能够渲染对应的网站成 /new_add/4/5/

reverse
函数也是同样,获取的时候会随着产生新的网站,那样,在想改网站时只须要改
urls.py 中的正则表明式(url
参数第3有个别),其余地方都“自动”跟着变了,是否这样越来越好呢?

 

除此以外,怎样让在此以前的
/add2/四分三/自动跳转到新的网站呢
要知道Django不会帮您做那几个,那么些须要和谐来写贰个跳转方法

具体思路是,在 views.py 写3个跳转的函数:

from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse


def old_add2_redirect(request, a, b):
    return HttpResponseRedirect(
        reverse('add2', args=(a, b))
    )

urls.py中:

  url(r'^add2/(\d+)/(\d+)/$', calc_views.old_add2_redirect),
  url(r'^new_add/(\d+)/(\d+)/$', calc_views.add2, name='add2'),

这样,如若用户收藏夹中有 /add2/五分四/ ,访问时就能自行跳转到新的
/new_add/4/5/ 了

发端容许认为直接写网站轻松,不过用多了你势必会发觉,用“死网址”的艺术很不佳

Django教程 之
安装、基本命令、视图与网址,pythondjango python Django教程 之
安装、基本命令、视图与网址 一、简单介绍 Django 中提供了支出网…

网站地图xml地图