三个命令

1.创建一个django项目

在cmd中:django-admin.py startproject project_name

D:\python\django_site>django-admin startproject first_site

2.创建应用

python manage.py startapp app_name

D:\python\django_site\first_site>python manage.py startapp app001

3.运行django项目

python manage.py runserver 8999

D:\python\django_site\first_site>python manage.py runserver 8999

浏览器输入:127.0.0.1:8999就可以访问到django自带的欢迎页面

第一个视图

​ 创建一个基于Django的页面:Hellow World

​ 使用Django,页面的内容是靠view function(视图函数) 来产生,URL定

义在 URLconf 中。首先,我们先写一个Hello World视图函数。

views.py

from django.shortcuts import HttpResponse

# Create your views here.
import datetime
def first(request):
return HttpResponse('Hellow World')

​ 每个视图函数至少要有一个参数,通常被叫作request。这是一个触发这个视图、包含当前Web请求信息的对象,是类django.http.HttpRequest的一个实例。在这个示例中,我们虽然不用request做任何事情,然而它仍必须是这个视图的第一个参数。


​ django‐admin.py startproject 时,该脚本会自动为你建了一份 URLconf(即 urls.py 文

件)。 默认的urls.py会像下面这个样子

urls.py

from django.contrib import admin
from django.urls import path
#添加:
from app001 import views
urlpatterns = [
path('admin/', admin.site.urls),
#添加:
path('^first$/', views.first) #所有指向 URL /first/ 的请求都应由 first 这个视图函数来处理
]

​ 调用 path 函数并将返回结果保存到 urlpatterns 列表。在URLconf中加入URL和view,只需增加映射URL模式和view功能(添加path函数对象)

​ 运行命令行 python manage.py runserver 8999打开浏览器访问 http://127.0.0.1:8000/first/ 就可以查看输出结果

Django是怎么处理请求的

​ 当你通过在浏览器里敲http://127.0.0.1:8000/first/来访问Hello world消息得时候,Django在后台有些什么动作呢?

所有均开始于setting文件。当你运行python manage.py runserver,脚本将在于manage.py同一个目录下查找名为setting.py的文件。这个文件包含了所有有关这个Django项目的配置信息,均大写: TEMPLATE_DIRS, DATABASE_NAME , 等. 最重要的设置时ROOT_URLCONF,它将作为URLconf告诉Django在这个站点中那些Python的模块将被用到,创建的settings.py包含一个ROOT_URLCONF配置用来指向自动产生的urls.py. 打开文件settings.py你将看到如下:

​ ROOT_URLCONF = 'firt_site.urls'

相对应的文件是first_site/urls.py

​ 当访问 URL /first/ 时,Django 根据 ROOT_URLCONF 的设置装载 URLconf 。 然后按顺序逐个匹配URLconf里的URLpatterns,直到找到一个匹配的。 当找到这个匹配 的URLpatterns就调用相关联的view函数,并把HttpRequest 对象作为第一个参数。 正如我们在第一个视图例子里面看到的,一个视图功能必须返回一个HttpResponse。 一旦做完,Django将完成剩余的转换Python的对象到一个合适的带有HTTP头和body的Web Response(例如,网页内容)。

总结一下:

  1. 进来的请求转入/first/.
  2. Django通过在ROOT_URLCONF配置来决定根URLconf.
  3. Django在URLconf中的所有URL模式中,查找第一个匹配/hello/的条目。
  4. 如果找到匹配,将调用相应的视图函数
  5. 视图函数返回一个HttpResponse
  6. Django转换HttpResponse为一个适合的HTTP response, 以Web page显示出来

第二个视图:动态视图

在view.py增加下面代码

import datetime
def current_datetime(request):
now = datetime.datetime.now().strftime('%Y-%m-%d')
return HttpResponse(now)

在urls.py的urlpatterns列表中增加下面代码

path('time/', current_datetime)

URL配置和松耦合

​ 松耦合 原则。 简单的说,松耦合是一个 重要的保证互换性的软件开发方法。

​ Django的URL配置就是一个很好的例子。 在Django的应用程序中,URL的定义和视图函数之间是松 耦合的,换句话说,决定URL返回哪个视图函数和实现这个视图函数是在两个不同的地方。 这使得 开发人员可以修改一块而不会影响另一块。例如,考虑一下current_datetime视图。 如果我们想把它的URL 从原来的 /time/ 改变到 /currenttime/ ,我们只需要快速的修改一下URL配置即可, 不用担心这个函数的内部实现。 同样的,如果我们想要修改这个函数的内部实现也不用担心会影响 到对应的URL。

第三个视图:动态URL

在我们的 current_datetime 视图范例中,尽管内容是动态的,但是URL ( /time/ )是静态的。 在 大多数动态web应用程序,URL通常都包含有相关的参数。 举个例子,一家在线书店会为每一本书提供一个URL,如:/books/243/、/books/81196/。

/time/plus/1/ 显示当前时间+1个小时的页面 /time/plus/2/ 显示当前时间+2个小时的页面 /time/plus/3/ 显示当前时间+3个小时的页面,以此类推。

urlpatterns列表增加:

re_path(r'^time/plus/(\d+)/$', views.hour_ahead),

增加一个分组,对应的视图函数就需要增加一个参数

def hour_ahead(request,offset):
dt = datetime.datetime.now()+datetime.timedelta(hours=int(offset))
now = dt.strftime('%H:%M:%S')
return HttpResponse(now)

这里命名变量为offset ,也可以任意命名它,只要符合Python 的语法。变量名是无关紧要的,重要的是它的位置,它是这个函数的第二个参数 (在request 的后面)。 还可以使用关键字来定义它,而不是用位置。对分组进行命名

from django.urls import path,re_path
#新版本2.2.6 路由使用path(),无需要无需用^和$,需要用到正则表达式使用re_path()
#2.0之前使用url()
re_path(r'^time/plus/(?p<offset>\d+)/$', views.hour_ahead),

Django框架1——视图和URL配置的更多相关文章

  1. Django笔记 —— 高级视图和URL配置

    最近在学习Django,打算玩玩网页后台方面的东西,因为一直很好奇但却没怎么接触过.Django对我来说是一个全新的内容,思路想来也是全新的,或许并不能写得很明白,所以大家就凑合着看吧- 本篇笔记(其 ...

  2. Django学习day4——视图和URL配置

    创建一个简单的hello world 在day3中我们第一次运行了服务器,里面是一个django的欢迎页面,那是因为我们没有配置URL和视图,django在底层会自动跳转这个页面上 我们在mysite ...

  3. 测试开发之Django——No8.Django中的视图与URL配置

    在Django中,页面内容是靠views function(视图函数)来产生,URL定义在URLconf中. 这是一个纯净项目的url配置文件,他存在的目录,是与setting文件在同一个目录中. u ...

  4. 视图和URL配置

    视图和URL配置 实验简介 上一章里我们介绍了如何创建一个Django项目并启动Django的开发服务器.本章你将学到用Django创建动态网页的基本知识. 同时,也教会大家怎么在本地机器上建立一个独 ...

  5. django-高级视图和url配置

    高级视图和url配置 一.URLconf技巧 1.流线型化函数导入 对于配置url,我们可以使用以下几种方式: (1)引入view中的函数 from firstSite.view import cur ...

  6. Django框架03 /视图相关

    Django框架03 /视图相关 目录 Django框架03 /视图相关 1. 请求相关 2.响应相关 3.FBV和CBV 视图(视图函数和视图类) 3.1 类视图 CBV 3.2 视图函数 FBV ...

  7. 视图的URL配置,找不到我设置的第一个Page

    问题:视图的URL配置,找不到我设置的第一个Page 我的代码如下: 结果访问/test/时说找不到这个page   原因:patterns方法的参数有两个,一个是prefix,一个是参数元祖,详见下 ...

  8. django学习笔记(一)视图和url配置

    1.开始一个项目: 进入创建的目录,然后: django-admin startproject myblog 2.启动开发服务器: python manage.py runserver 注:默认是80 ...

  9. Django之视图和URL配置

    1.在创建项目时,Django会自动创建URL配置,在urls.py文件中 文件的默认内容如下所示: """mysite URL Configuration The ur ...

随机推荐

  1. NAT双线路配置详解

  2. vue+vue-resource设置请求头(带上token)

    前言 有这样的一个需求,后台服务器要求把token放在请求头里面 嗯一般是通过data里面通过参数带过去的 第一种方法 全局改变: Vue.http.headers.common['token'] = ...

  3. Java设计模式之一单例模式

    什么是单例模式 保证一个系统中的某个类只有一个实例而且该实例易于外界访问.例如Windows界面的任务管理器就可以看做是一个单例. 单例模式的使用场景 需要频繁的进行创建和销毁的对象: 创建对象时耗时 ...

  4. Oracle语法 及 SQL题目(一)

    目录 课例复制 SQL题目一 SQL题目二 SQL题目三 笔记 课例复制 OCM 全称:Oracle Certified Master 认证大师 含义:Oracle 原厂推出的数据库方向最高级别认证 ...

  5. Qt Creater-特殊注释TODO,FIXME

    简述 TODO: + 说明: 如果代码中有该标识,说明在标识处有功能代码待编写,待实现的功能在说明中会简略说明. FIXME: + 说明: 如果代码中有该标识,说明标识处代码需要修正,甚至代码是错误的 ...

  6. JVM 自定义类加载器

    一.创建自定义类加载器 package com.example.jvm.classloader; import java.io.ByteArrayOutputStream; import java.i ...

  7. dubbo线程模型配置

    首先了解一下dubbo线程模型 如果事件处理的逻辑能迅速完成,并且不会发起新的IO请求,比如只是在内存中记个标识.则直接在IO线程上处理更快,因为减少了线程池调度. 但如果事件处理逻辑较慢,或者需要发 ...

  8. Mysql| 组合where子句过滤数据(AND,OR,IN,NOT)

    ysql 允许使用多个where子句,组合where子句允许使用两种方式使用:AND 和OR子句的方式使用.数据库中的操作符号:AND , OR , IN , NOT. AND:SELECT * FR ...

  9. mediacoder固定质量CRF

    视频编码:crf 与 bitrate 对照表 CRF(constant rate factor)就是x264/x265下压制视频的一种恒定量化值的编码方式,码率不恒定.其实就相当于vbr1pass.采 ...

  10. RabbitMQ教程C#版 - 发布订阅

    先决条件本教程假定 RabbitMQ 已经安装,并运行在localhost标准端口(5672).如果你使用不同的主机.端口或证书,则需要调整连接设置. 从哪里获得帮助如果您在阅读本教程时遇到困难,可以 ...