2Python全栈之路系列之Django路由与视图

简介:

Python全栈之路系列之Django路由与视图


路由说白了就是与视图(函数)的对应关系,怎么说呢,一个路由对应一个视图,比如上面文章中所提到的那样,当打开/users/路径的时候会让users这个函数来进行逻辑处理,把处理的结果再返回到前端。

那么django是怎么知道从哪里找路由的配置文件入口呢?其实这在settings.py文件中已经被定义了:

1
ROOT_URLCONF =  'ansheng.urls'

路由的配置

绝对地址访问

1
2
# 访问地址必须是http://127.0.0.1:8000/hello/
url(r '^hello/$' , views.hello),

使用正则与分组

在函数内需要接受year,month,day参数

1
url(r '^(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/(?P<day>[0-9]{2})/$' , views.deta),

deta视图必须接收以下参数:

1
def  deta(request, year, month, day):

访问地址为:http://127.0.0.1:8000/2016/11/19/

传值

1
url(r '^(?P<year>[0-9]{4})/$' , views. id , { 'foo' 'bar' }),

id函数必须接受yearfoo参数

include分发,有利于解耦

1
2
# 当访问二级路由是cmdb的时候转发给app01.urls处理
url(r '^cmdb/$' , include( 'app01.urls' )),

别名

主要用于前端的from表单验证,如下实例,URLs地址的时候,因为from表单提交的地址使用了别名,所以会自动替换:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# urls.py
from  django.conf.urls  import  url
from  app01  import  views
urlpatterns  =  [
     url(r '^index/$' , views.index, name = 'bieming' ),
]
# views.py
from  django.shortcuts  import  render,HttpResponse
def  index(request):
     if  request.method = = 'POST' :
         username = request.POST.get( 'username' )
         password = request.POST.get( 'password' )
         if  username = = 'as'  and  password = = '123' :
             return  HttpResponse( "登陆成功" )
     return  render(request,  'index.html' )
# index.html
<form action = "{% url 'bieming' %}"  method = "post" >
      用户名:< input  type = "text"  name = "username" >
      密码:< input  type = "password"  name = "password" >
      < input  type = "submit"  value = "submit" >
< / form>

路由分解

可以使用incloud把很多个路由进行拆封,然后把不同的业务放到不同的urls中,首先我们创建项目及应用

1
2
3
4
5
6
7
8
# 创建DjangoProjects项目
E:\>django - admin.py startproject DjangoProjects
 
E:\>cd DjangoProjects
# 在项目内创建app1和app12应用
E:\DjangoProjects>python manage.py startapp app1
 
E:\DjangoProjects>python manage.py startapp app2

项目的urls.py文件内容

1
2
3
4
5
6
7
8
9
# E:\DjangoProjects\DjangoProjects\urls.py
from  django.conf.urls  import  url, include
from  django.contrib  import  admin
 
urlpatterns  =  [
     # 当路由匹配到一级路径为app1时,就把这个URL交给app1.urls再次进行匹配
     url(r '^app1/' , include( 'app1.urls' )),
     url(r '^app2/' , include( 'app2.urls' )),
]

应用的urls.pyviews.py文件内容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# E:\DjangoProjects\app1\urls.py
from  django.conf.urls  import  url,include
from  django.contrib  import  admin
from  app1  import  views
urlpatterns  =  [
     url(r '^hello/$' , views.hello),
]
 
# E:\DjangoProjects\app1\views.py
from  django.shortcuts  import  render,HttpResponse
def  hello(request):
     return  HttpResponse( "Hello App1" )
     
# E:\DjangoProjects\app2\urls.py
from  django.conf.urls  import  url
from  django.contrib  import  admin
from  app2  import  views
urlpatterns  =  [
     url(r '^hello/$' , views.hello),
]
 
# E:\DjangoProjects\app2\views.py
from  django.shortcuts  import  render,HttpResponse
def  hello(request):
     return  HttpResponse( "Hello App2" )
  1. 当访问http://127.0.0.1:8000/app1/hello/时返回内容Hello App1

  2. 当访问http://127.0.0.1:8000/app2/hello/时返回内容Hello App2

视图

http请求:HttpRequest对象
http响应:HttpResponse对象

HttpRequest对象属性

属性 描述
request.path 请求页面的路径,不包括域名
request.get_full_path() 获取带参数的路径
request.method 页面的请求方式
request.GET GET请求方式的数据
request.POST POST请求方式的数据

HttpResponse对象属性

属性 描述
render(request, ‘index.html’) 返回一个模板页面
render_to_response(‘index.html’) 返回一个模板页面
redirect(‘/login’) 页面跳转
HttpResponseRedirect(‘/login’) 页面跳转
HttpResponse(‘https://blog.ansheng.me‘) 给页面返回一个字符串










本文转自 Edenwy  51CTO博客,原文链接:http://blog.51cto.com/edeny/1925003,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
监控 安全 应用服务中间件
python中Django入门(四)
python中Django入门(四)
31 0
|
10天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【4月更文挑战第9天】本文对比了Python三大Web框架Django、Flask和Pyramid。Django功能全面,适合快速开发,但学习曲线较陡;Flask轻量灵活,易于入门,但默认配置简单,需自行添加功能;Pyramid兼顾灵活性和可扩展性,适合不同规模项目,但社区及资源相对较少。选择框架应考虑项目需求和开发者偏好。
|
2天前
|
Python
基于Django的Python应用—学习笔记—功能完善
基于Django的Python应用—学习笔记—功能完善
|
9天前
|
JavaScript 前端开发 Docker
全栈开发实战:结合Python、Vue和Docker进行部署
【4月更文挑战第10天】本文介绍了如何使用Python、Vue.js和Docker进行全栈开发和部署。Python搭配Flask创建后端API,Vue.js构建前端界面,Docker负责应用的容器化部署。通过编写Dockerfile,将Python应用构建成Docker镜像并运行,前端部分使用Vue CLI创建项目并与后端交互。最后,通过Nginx和另一个Dockerfile部署前端应用。这种组合提升了开发效率,保证了应用的可维护性和扩展性,适合不同规模的企业使用。
|
17天前
|
前端开发 测试技术 数据库
【python】为什么使用python Django开发网站这么火?
【python】为什么使用python Django开发网站这么火?
|
27天前
|
Python
老男孩&路飞学城Python全栈
老男孩&路飞学城的Python全栈开发重点班由ALEX老师主讲,核心教学内容,100多天课程,近100G资料,含基础到实战。一线技术专家亲授,以案例教学引导学生逐步进入项目实战。
20 1
老男孩&路飞学城Python全栈
|
1月前
|
中间件 数据安全/隐私保护 Python
python中Django入门(三)
python中Django入门(三)
17 0
|
1月前
|
前端开发 JavaScript Shell
python中Django入门(二)
python中Django入门(二)
13 0
|
1月前
|
SQL Shell 数据库
python中Django入门(一)
python中Django入门(一)
28 0
|
1月前
|
设计模式 前端开发 数据库
Django是一个用Python编写的开源Web应用框架
Django是一个用Python编写的开源Web应用框架
12 1