一、web框架

1.什么是web框架

  Web框架是用来进行Web应用开发的一个软件架构,开发者在基于Web框架实现自己的业务逻辑。Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端。服务端和客户端两者的交互是基于请求的。具体流程是:客户端先请求(用户输入网址)------>按照http协议的请求协议发送请求------------>服务端接收到请求进行处理----------->服务端按照http协议的响应协议来响应请求------------>用户看到页面。

2.MVC和MTV模式

(1)MVC

用于Web服务器开发的MVC模式,就是把Web应用分为模型(M),控制器(C)和视图(V)三层。其中模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求。

(2)MTV

MTV模式含义:

M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。

T 代表模板 (Template):负责如何把页面展示给用户(html)。

V 代表视图(View):   负责业务逻辑,并在适当时候调用Model和Template。

此外,Django还有一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template。

MTV响应流程:

3.wsgiref模块

  真实开发中的python web程序分为服务器程序和应用程序。服务器程序负责对socket服务器进行封装,并在请求到来时,对请求的各种数据进行整理。应用程序则负责具体的逻辑处理。

  Django等Web框架属于应用程序,为了使应用程序和服务器程序配合使用,就必须设置统一的接口协议。这样服务器程序实现底层代码,而应用程序编写Web业务。WSGI就做了这事。

  WSGI(Web Server Gateway Interface)就是一种规范,它定义了使用Python编写的web应用程序与web服务器程序之间的接口格式,实现web应用程序与web服务器程序间的解耦。

  常用的WSGI服务器有uwsgi、Gunicorn。而Python标准库提供的独立WSGI服务器叫wsgiref,Django开发环境用的就是这个模块来做服务器。

二、URL路由

(一)django概述

1.项目目录介绍

最上面那个second_pro是项目的总目录。这个项目的文件都放在这个目录下。下面的app01和app02是不同的应用。应用文件下的views.py放在业务逻辑,models.py里放在数据库相关命令。Second_pro是项目文件,里面放着__init__文件、配置文件和路由文件。Templates文件夹下放着html文件。manage.py是启动文件。

2.简单登陆页面

(1)url路由分发   urls.py

(2)在views.py里写index函数

request是请求相关内容。render方法表示把index.html页面发送给浏览器。还有一种发送浏览器的方式是HttpResponse。

(3)写index.html文件

在templates文件夹下新建index.html文件。

(4)运行项目,在浏览器输入http://127.0.0.1:8000/index即可看到浏览器渲染的index.html页面效果。

(二)、URL配置

1.URL配置:建立url和相对应的视图函数之间的映射表。即当请求url时,执行对应的视图函数。

2.基本格式:

from django.conf.urls import url

urlpatterns = [

     url(正则表达式, views视图函数,参数,别名),

]

#如:url(r'^index/',views.index),

  

3.注意事项:

urlpatterns中的元素按照书写顺序从上往下逐一匹配正则表达式,一旦匹配成功则不再继续。

若要从URL中捕获一个值,只需要在它周围放置一对圆括号(分组匹配)。

不需要添加一个前导的反斜杠,因为每个URL 都有。例如,应该是^index 而不是 ^/index。

每个正则表达式前面的'r' 是可选的但是建议加上。

4.正则表达式

url(r'^index/',views/(\d{4})/$,index)

\d{4}表示4位的数字;加个括号,表示在视图函数中可以取到这个值;$是完全匹配,表示只能匹配到前面这个路径。不加$,index/1234/22也能匹配到

注意点:

地址栏里访问index,后面可以不用加/,django会默认加/。但是在settings里设置APPEND_SLASH=False,当index是完全匹配时( url(r'^index/$', views.index),)此时我们再请求 http://127.0.0.1:8000/index 时就会提示找不到页面。

(三)、分组命名匹配

无名分组使用简单的正则表达式分组匹配(通过圆括号)来捕获URL中的值并以位置参数形式传递给视图。

有名分组使用分组命名匹配的正则表达式组来捕获URL中的值并以关键字参数形式传递给视图。

分组命名正则表达式组的语法是(?P<name>pattern),其中name是组的名称,pattern是要匹配的模式。

比如 url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$表示url/articles/1998/12/4

相应的,在视图函数中也要指定名字相同的参数。传递到试图函数的参数永远是字符串形式。

视图函数中可以指定参数的默认值。匹配时没有参数传过来就使用默认值,有参数就用传过来的实际值。

(四)、url路由分发include

当有多个应用时,url需要分发到各自应用文件夹下的urls中。django提供路由分发接口include。

方法

先在app01文件夹下新建urls.py文件。通过include,此时url/app01/开头的路径请求都去app01的urls.py文件里进行匹配。应用的urls.py文件和项目的urls.py文件一样。

Django之web框架和url路由的更多相关文章

  1. Web框架本质及第一个Django实例 Web框架

    Web框架本质及第一个Django实例   Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web ...

  2. Django学习---Web框架及基础知识

    Django学习---Web框架 web框架的本质 我们在学socket,我们创建一个socketserver,然后运行起来,有一个client客户端要连接socket服务端,连接上之后,如果两边都没 ...

  3. 动手写一个简单的Web框架(Werkzeug路由问题)

    动手写一个简单的Web框架(Werkzeug路由问题) 继承上一篇博客,实现了HelloWorld,但是这并不是一个Web框架,只是自己手写的一个程序,别人是无法通过自己定义路由和返回文本,来使用的, ...

  4. $Django 等web框架,交互,基础入门

    1 web 应用2 c/s 和bs架构3 python中的web框架    a :socket    b:路由跟视图函数匹配关系    c:模板渲染 django: uwsgi/wsgiref    ...

  5. Django之Web框架本质及第一个Django实例

    Web框架本质 我们可以这样理解:所有的Web应用本质上就是一个socket服务端,而用户的浏览器就是一个socket客户端. 这样我们就可以自己实现Web框架了. 半成品自定义web框架 impor ...

  6. django基础(web框架,http协议,django安装)

    学习Django之前我们先来看什么是OSI七层模型: 应用层 表示层       应用层(五层模型中把这三层合成一个应用层) http协议 会话层 传输层                  提供端口对 ...

  7. Django基础之二(URL路由)

    URL路由 简介 对于高质量的web应用来说,使用简洁,优雅的URL路由是一个值得尊重的细节,Django可以随心所欲的设计URL,不受框架的约束 为了给一个应用设计URL,你需要一个Python模块 ...

  8. Django: 之Web框架完美解析

    Web框架解析 Web通过Socket来监听客户端,,一旦发现客户发送的信息立刻接受.接受之后在服务端查找客户的请求,找到请求返回给用户,断开.这是一个连接,不断的接收,不断的返回. #!/usr/b ...

  9. py库: django (web框架)

    http://www.imooc.com/learn/736 Python-走进Requests库 http://www.imooc.com/learn/790 django入门与实践 http:// ...

随机推荐

  1. Github第三方登录

    笔者第一次写网站只写了接收参数以及登录页面就兴奋了一整天,还特意地加上了第三方登录,想起当时的情景还历历在目.之前是照着被人的博客一步步完成第三方登录的功能,现在就要自己来理解完成了 1. OAuth ...

  2. OSG加载倾斜摄影数据

    目录 1. 概述 2. 实例 2.1. 代码 2.2. 解析 3. 结果 1. 概述 ContextCapture(Smart3D)生成的倾斜摄影模型数据一般都形如如下组织结构: 在Data目录下包含 ...

  3. Spring5参考指南:基于注解的容器配置

    文章目录 @Required @Autowired @primary @Qualifier 泛型 @Resource @PostConstruct和@PreDestroy Spring的容器配置可以有 ...

  4. 【三剑客】sed命令

    1. Sed 简介 sed 是Stream Editor(流编辑器)的缩写,是操作.过滤和转换文本内容的强大工具.常用功能有增删改查,过滤,取行.   sed 是一种新型的,非交互式的编辑器. 它能执 ...

  5. [故障解决]图文:windows apache无法启用 端口被占用

    windows apache无法启用 端口被占用 1 XAMPP Error: Apache shutdown unexpectedly 无法启动apache,显示的log为: 2 查了一下端口, 通 ...

  6. 用两张图告诉你,为什么你的App会卡顿?

    有什么料? 从这篇文章中你能获得这些料: 知道setContentView()之后发生了什么? 知道Android究竟是如何在屏幕上显示我们期望的画面的? 对Android的视图架构有整体把握. 学会 ...

  7. 《WCF技术内幕》翻译3:第1部分_第1章_蓝月亮:普遍需求和普遍概念

    第一部分:WCF介绍    章节目录:    第1章:蓝月亮    第2章:面向服务    第3章:消息交换模式.拓扑和编排    第4章:WCF 101 第1章:蓝月亮    商业和市场对软件系统新 ...

  8. EntityFramework 迁移遇到的问题

    2019独角兽企业重金招聘Python工程师标准>>> 添加迁移add-migration migrationname 更新数据Update-Database EntityFrame ...

  9. 集训模拟赛-1-T2

    好了不要在铺垫了直接整吧就 题目拿来!!!!!!! 倒水 (water) (256MB,1s) [问题描述] 你有一个水桶(记为 0),两个杯子(记为 1,2).水桶中的水量无限,容量也无限.1 号杯 ...

  10. Codeforces 1332 D. Walk on Matrix(构造矩阵)

    怎么构造呢? \(首先我们不可能去构造一个2000*2000的矩阵,那太复杂了\) \(也许我们可以看看2*2的矩阵??\) \[\left[ \begin{matrix} x&y\\ z&a ...