Django 视图与网址进阶

1.1、简单使用:

把我们新定义的app加到settings.py中的INSTALL_APPS中
修改 HelloDjango/HelloDjango/settings.py 
  1. INSTALLED_APPS = [
  2. 'django.contrib.admin',
  3. 'django.contrib.auth',
  4. 'django.contrib.contenttypes',
  5. 'django.contrib.sessions',
  6. 'django.contrib.messages',
  7. 'django.contrib.staticfiles',
  8. 'web_app', # python manage.py startapp web_app # web_app 是一个app的名称
  9. ]

提示:这一步是干什么呢?
         新建的 app 如果不加到 INSTALL_APPS 中的话, django就不能自动找到app中的模板文件(app-name/templates/下的文件)和静态文件(app-name/static/中的文件)

1.2、
定义视图函数(访问页面时的内容)
我们在HelloDjango这个目录中,把views.py打开,修改其中的源代码,改成下面的 
  1. # -*- coding: utf-8 -*-
  2. from django.http import HttpResponse
  3. def index(request):
  4. return HttpResponse(u"欢迎登陆 ZJ 自动化运维平台")
提示:
       我们定义了一个index()函数,第一个参数必须是 request,与网页发来的请求有关,request 变量里面包含get或post的内容


1.3、
定义视图函数相关的URL(网址)  (即规定 访问URL 对应什么内容)
 Django 1.8.x及以上
  1. from django.conf.urls import url
  2. from django.contrib import admin
  3. from web_app import views as web_views
  4. admin.autodiscover()
  5. urlpatterns = [
  6. url(r'^$',web_views.index),
  7. url(r'^admin/', admin.site.urls),
  8. ]

在终端上运行
 python manage.py runserver 9001     [默认8000]

展示效果:



二、在网页上做加减法
2.1.1. 采用 /add/?a=4&b=5 这样GET方法进行
  1. django-admin.py startproject HelloDjango
  2. cd HelloDjango
  3. python manage.py startapp HelloDjango

      自动生成目录大致如下(因不同的 Django 版本有一些差异,如果差异与这篇文章相关,我会主动提出来,没有说的,暂时可以忽略他们之间的差异,后面的教程也是这样做):

HelloDjango/
├── web_app
│   ├── __init__.py
│   ├── admin.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
|
├── manage.py
└── HelloDjango
    ├── __init__.py
    ├── settings.py
    ├── urls.py
    └── wsgi.py
我们修改一下 HelloDjango/views.py文件
  1. # -*- coding: utf-8 -*-
  2. from django.http import HttpResponse
  3. from django.shortcuts import render
  4. def add(request):
  5. a = request.GET['a']
  6. b = request.GET['b']
  7. c = int(a)+int(b)
  8. return HttpResponse(str(c))

注:request.GET 类似于一个字典,更好的办法是用 request.GET.get('a', 0) 当没有传递 a 的时候默认 a 为 0


2.1.2、接着修改 HelloDjango/urls.py 文件,添加一个网址来对应我们刚才新建的视图函数。
  1. from django.conf.urls import url
  2. from django.contrib import admin
  3. from web_app import views as web_views
  4. urlpatterns = [
  5. url(r'^add/', web_views.add, name='add'),
  6. url(r'^$',web_views.index),
  7. url(r'^admin/', admin.site.urls),
  8. ]

查看结果:
 传值进去,我们在后面加上 ?a=4&b=5,即访问
 http://127.0.0.1:8000/add/?a=4&b=5
       



2.2 采用 /add/3/4/ 这样的网址的方式
前面介绍的时候就说过 Django 支持优雅的网址。
我们接着修改 calc/views.py文件,再新定义一个add2 函数,原有部分不再贴出。
  1. # -*- coding: utf-8 -*-
  2. from django.http import HttpResponse
  3. from django.shortcuts import render
  4. def add(request):
  5. a = request.GET['a']
  6. b = request.GET['b']
  7. c = int(a)+int(b)
  8. return HttpResponse(str(c))

  9. def add2(request, a, b): #接受参数。
  10. c = int(a) + int(b)
  11. return HttpResponse(str(c))

接着修改 HelloDjango/urls.py 文件,再添加一个新的 url

from django.conf.urls import url
from django.contrib import admin
from web_app import views as web_views urlpatterns = [
url(r'^add2/(\d+)/(\d+)/$', web_views.add2, name='add2'), #新添加一行
url(r'^add/', web_views.add, name='add'),
url(r'^$',web_views.index),
url(r'^admin/', admin.site.urls), ]

  1. Django 1.7.x 及以下:
  2.     url(r'^add/(\d+)/(\d+)/$', 'calc.views.add2', name='add2'),
  3. Django 1.8.x 及以上
  4.     url(r'^add2/(\d+)/(\d+)/$', web_app.views.add2, name='add2'),

      我们可以看到网址中多了 (\d+), 正则表达式中 \d 代表一个数字,+ 代表一个或多个前面的字符,写在一起 \d+ 就是一个或多个数字,用括号括起来的意思是保存为一个子组(更多知识请参见 Python 正则表达式),每一个子组将作为一个参数,被 views.py 中的对应视图函数接收。

  我们再访问 http://127.0.0.1:8000/add/4/5/ 就可以看到和刚才同样的效果,但是这回网址更优雅了。



2.3、url 中的 name [技能提升]
我们还有刚才的代码,再来看一下 urls.py 中的代码.
  1. from django.conf.urls import url
  2. from django.contrib import admin
  3. from calc import views as web_views
  4. urlpatterns = [
  5. url(r'^add/', web_views.add, name='add'),
  6. url(r'^add2/(\d+)/(\d+)/$', web_views.add2, name='add2'),
  7. url(r'^admin/', admin.site.urls),
  8. ]

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

我们在开发的时候,刚开始想用的是 /add/4/5/ ,后来需求发生变化,比如我们又想改成 /4_add_5/这样的格式,但是我们在网页中,代码中很多地方都写死的是.




1.2、Django 视图与网址__进阶的更多相关文章

  1. django 视图与网址

    我是一个新手,内容粗糙,望大家多多指点.在这里我只是总结自身所学. 视图与网址 操作文件:urls.py.views.py urls.py 作用:用于处理前台的链接(如前台访问:127.0.0.1:8 ...

  2. Django 视图与网址进阶

    一 .在网页上做加减法 1. 采用 /add/?a=4&b=5 这样GET方法进行 1 2 3 django-admin.py startproject zqxt_views cd zqxt_ ...

  3. 【Django视图与网址进阶004】

    一.在网页上做加减法 1. 采用 /add/?a=4&b=5 这样GET方法进行 django-admin.py startproject zqxt_views cd zqxt_views p ...

  4. Django视图与网址

    Django中网址是写在 urls.py 文件中,用正则表达式对应 views.py 中的一个函数(或者generic类),我们用一个项目来演示. 下载本节所有源代码: 学习编程最好的办法就是动手敲代 ...

  5. Django 2.0 学习(07):Django 视图(进阶-续)

    接Django 2.0 学习(06):Django 视图(进阶),我们将聚焦在使用简单的表单进行处理和精简代码. 编写简单表单 我们将用下面的代码,来替换之前的detail模板("polls ...

  6. 【Mac系统 + Python + Django】之开发一个发布会系统【Django视图(二)】

    此学习资料是通过虫师的python接口自动化出的书学习而来的,在此说明一下,想学习更多的自动化的同学可以找虫师的博客园,非广告,因为我python+selenium自动化也是跟虫师学的,学习效果很好的 ...

  7. [diango]理解django视图工作原理

    前言:正确理解django视图view,模型model,模板的概念及其之间的关联关系,才能快速学习并上手使用django制作网页 本文主要讲解自己在学习django后对视图view的理解 在进入正文之 ...

  8. Django 2.0 学习(03):Django视图和URL(下)

    接上篇博文,继续分析Django基本流程. 编写第一个(view)视图函数 1.打开文件polls/views.py,输入下面的Python代码: from django.http import Ht ...

  9. 如何在django视图中使用asyncio(协程)和ThreadPoolExecutor(多线程)

    Django视图函数执行,不在主线程中,直接 loop = asyncio.new_event_loop() # 更不能loop = asyncio.get_event_loop() 会触发 Runt ...

随机推荐

  1. Java精选笔记_Servlet技术

    Servlet技术 Servlet开发入门 Servlet接口 针对Servlet技术的开发,SUN公司提供了一系列接口和类,其中最重要的是javax.servlet.Servlet接口. Servl ...

  2. swift开发之 -- ? 和 ! 的作用

    记录下这个知识点: 一般我们在一下两种情况会遇到 ? 和 !的使用 1,声明变量时 var number:Int? var str:String? 2,在对变量进行操作时 number?.hasVal ...

  3. [笔试题]黑板上写下50个数字,选两个黑板上数字a和b,在黑板写|b-a|,剩下的数字?

    在黑板上写下50个数字:1至50.在接下来的49轮操作中,每次做如下操作:选取两个黑板上的数字a和b,擦去,在黑板上写|b-a|.请问最后一次动作之后剩下的数字可能是什么?为什么?(不用写代码,不写原 ...

  4. Linux 远程同步:rsync

    rsync 简介: (1) rsync 是一个远程数据同步工具,可通过 LAN/WAN 快速同步多台主机间的文件(2) rsync 使用所谓的“rsync算法”来使本地和远程两个主机之间的文件达到同步 ...

  5. linux系统socket通信编程实践

    简单介绍并实现了基于UDP(TCP)的windows(UNIX下流程基本一致)下的服务端和客户端的程序,本文继续探讨关于UDP编程的一些细节. 下图是一个简单的UDP客户/服务器模型: 我在这里也实现 ...

  6. 关于MCU的烧录,下载与其他接口的比较(二)

    单片机应用系统由硬件和软件组成,软件的载体是硬件的程序存储器,程序存储器采用只读存储器,这种存储器在电源关闭后,仍能保存程序,在系统上电后,CPU可取出这些指令重新执行.只读存储器(Read Only ...

  7. Swift-属性、方法、下标

    存储属性和计算属性 类.结构和枚举都能够定义存储属性和计算属性.其中存储属性就是常见的形式,又分为变量属性和常量属性,如: struct Point { var x = 0.0, y = 0.0 } ...

  8. MUI 单图片压缩上传(拍照+系统相册): 选择立即上传

    1 html 部分 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> < ...

  9. MQTT-SN协议乱翻之消息格式

    前言 紧接着上篇初步介绍,本文为第二篇,主要梳理MQTT-SN 1.2协议中定义的消息格式. 通用消息格式 消息头 其它可变部分 2/4字节表示 N字节组成 消息头部 长度 消息类型 1或3个字节 1 ...

  10. ruby+gem常用命令

    gem是一种文件组织的包,一般的ruby的很多插件都有由这种各种的包提供.我们来看看gem的用法     ruby -v #查看ruby 版本 ruby -e ''require"watir ...