Python开发【Django】:路由规则
Django路由规则
1、基于正则的URL
在templates目录下创建index.html、detail.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
{% for k,item in user_dict.items %}
<li><a target="_blank" href="/detail-{{ k }}.html">{{ item.name}}</a></li>
{% endfor %} </body>
</html>
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h2>详细信息</h2>
<h4>用户名:{{ detail_info.name }}</h4>
<h4>邮箱:{{ detail_info.email }}</h4>
</body>
</html>
detail.html
在urls.py文件增加对应路径
from django.conf.urls import url,include
from django.contrib import admin
from cmdb import views urlpatterns = [
url(r'^index', views.index),
url(r'^detail-(\d+).html/', views.detail),
]
在views.py文件创建对应方法
USER_DICT = {
'1':{'name':'root1','email':'root@live.com'},
'2':{'name':'root2','email':'root@live.com'},
'3':{'name':'root3','email':'root@live.com'},
'4':{'name':'root4','email':'root@live.com'},
}
def index(request):
return render(request,"index.html",{"user_dict":USER_DICT})
def detail(request,nid): # nid指定的是(\d+)里的内容
detail_info = USER_DICT[nid]
return render(request, "detail.html", {"detail_info": detail_info})
2、正则URL分组
在urls.py文件增加对应路径
from django.conf.urls import url,include
from django.contrib import admin
from cmdb import views urlpatterns = [
url(r'^index', views.index),
url(r'^detail-(?P<nid>\d+)-(?P<uid>\d+).html/', views.detail),
# nid=\d+ uid=\d+
]
在views.py文件创建对应方法
def detail(request,**kwargs):
print(kwargs)
#{'nid': '4', 'uid': '3'}
nid = kwargs.get("nid")
detail_info = USER_DICT[nid]
return render(request, "detail.html", {"detail_info": detail_info})
3、request.path_info或request.path(获取当前客户端的访问路径)
在urls.py文件配置
from django.conf.urls import url,include
from django.contrib import admin
from cmdb import views urlpatterns = [
url(r'^index', views.index),
]
urls.py
在views.py文件配置
def index(request):
print(request.path_info) #获取客户端当前的访问链接
# / index
return render(request,"index.html",{"user_dict":USER_DICT})
views.py
在templates目录下的index.html
<form action="{{ request.path_info }}" method="post">
<p><input name="user" type="text" placeholder="用户名"/></p>
<p><input name="password" type="password" placeholder="密码"/></p>
<p><input type="submit" value="提交"/></p>
</form>
参考第8条
4、name(对路由关系进行命名,根据此名称生成自己想要的URL)
在views.py文件配置
def index(request,*args,**kwargs):
return render(request,"index.html")
views.py
在urls.py文件配置
from django.conf.urls import url,include
from django.contrib import admin
from cmdb import views urlpatterns = [
url(r'^asdfasdfasdf/', views.index, name='i1'), #第一种方式i1
url(r'^yug/(\d+)/(\d+)/', views.index, name='i2'), #第二种方式i2
url(r'^buy/(?P<pid>\d+)/(?P<nid>\d+)/', views.index, name='i3'), #第三种方式i3
]
在templates目录下的index.html
<body>
{#第一种方法i1 路径asdfasdfasdf/#}
{#<form action="{% url "i1" %}" method="post">#}
{#第二种方法i2 路径yug/1/2/#}
{#<form action="{% url "i2" 1 2 %}" method="post">#}
{#第三种方法i3 路径buy/1/9//#}
<form action="{% url "i3" pid=1 nid=9 %}" method="post">
<p><input name="user" type="text" placeholder="用户名"/></p>
<p><input name="password" type="password" placeholder="密码"/></p>
<p><input type="submit" value="提交"/></p>
</form>
</body>
5、路由分发(把路由分发到spp urls文件)
主程序urls.py文件
from django.conf.urls import url,include
from django.contrib import admin urlpatterns = [
url(r'^monitor/', include('monitor.urls')), #调整到monitor目录中的urls.py文件
]
monitor下的urls.py文件
from django.conf.urls import url
from django.contrib import admin
from monitor import views
#
urlpatterns = [
url(r'^login', views.login),
]
6、默认值
在urls.py文件配置
from django.conf.urls import url
from django.contrib import admin
from cmdb import views urlpatterns = [
url(r'^index/', views.index, {'name':'root'}),
]
在views.py文件配置
def index(request,name):
print(name)
return HttpResponse('OK') #root
7、命名空间
主程序urls.py文件
from django.conf.urls import url,include urlpatterns = [
url(r'^a/', include('cmdb.urls', namespace='author-polls')),
url(r'^b/', include('cmdb.urls', namespace='publisher-polls')),
]
cmdb下的urls.py文件
from django.conf.urls import url
from cmdb import views urlpatterns = [
url(r'^index/', views.detail, name='detail'),
]
在views.py文件配置
from django.shortcuts import HttpResponse
from django.shortcuts import reverse def detail(request):
url = reverse('author-polls:detail')
print(url)
return HttpResponse('OK') # /a/index/
html模板中生成url
{% url 'author-polls:detail' %}
8、补充生成url路径
from . import models
def article(request,*args,**kwargs): # 第一种方式利用path_info,访问的url
print(request.path_info)
# /article/0-0.html/ # 第二种方式用reverse,自己生成
# 需要配合urls.py文件 url(r'...',views.article ,name='article')
from django.urls import reverse
url = reverse('article',kwargs=kwargs)
print(url)
# /article/0-0.html/
Django类方法
1、创建class对业务进行处理
在templates目录下创建home.html文件
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<form action="/home/" method="POST">
<p>
<input type="text" name="user" placeholder="用户名"/>
</p>
<p>
<input type="password" name="pwd" placeholder="密码"/>
</p>
<p>
<input type="submit" value="提交">
</p>
</form>
</body>
</html>
home.html
在urls.py文件增加home路径
from django.conf.urls import url,include
from django.contrib import admin
from cmdb import views urlpatterns = [
# 固定语法
url(r'^home/', views.Home.as_view()),
]
在views.py文件创建类Home
from django.views import View class Home(View):
# 先执行dispatch里面的内容
def dispatch(self,request, *args, **kwargs):
print("before")
# 调用父类中的dispatch
result = super(Home,self).dispatch(request, *args, **kwargs)
print("after")
return result # 根据反射获取用户提交方式,执行get或post方法
def get(self,request):
print(request.method)
return render(request,"home.html") def post(self,request):
print(request.method)
return render(request,"home.html")
Django请求信息
1、获取用户请求相关请求信息以及请求头
def detail(request):
print(type(request))
# < class 'django.core.handlers.wsgi.WSGIRequest'>
from django.core.handlers.wsgi import WSGIRequest
# print(request.environ)
for k,v in request.environ.items():
print(k,v)
# GATEWAY_INTERFACE
# CGI / 1.1
# LOGONSERVER \\L-PC
# REMOTE_HOST
# REQUEST_METHOD GET
# PROGRAMFILES C:\Program Files (x86)
# PROGRAMW6432 C:\Program Files
# PATH_INFO /a/index/
# TMP C:\Users\L\AppData\Local\Temp
# HOMEDRIVE C:
# COMMONPROGRAMFILES(X86) C:\Program Files (x86)\Common Files
# SCRIPT_NAME
# MOZ_PLUGIN_PATH C:\Program Files (x86)\Foxit Software\Foxit Reader\plugins\
# REMOTE_ADDR 127.0.0.1
# wsgi.errors <_io.TextIOWrapper name='<stderr>' mode='w' encoding='UTF-8'>
# HTTP_COOKIE sessionid=dlczhr2xm0tkg8uvkvk0bmvq5aj9q87n; csrftoken=cq82rWEKolufJRrO6u4Ib4VKHapMuC4nJzhLnLMDEpDeNVhjx7AtEjqZP10DbMqu
# HTTP_CONNECTION keep-alive
# wsgi.version (1, 0)
# CONTENT_TYPE text/plain
# wsgi.file_wrapper <class 'wsgiref.util.FileWrapper'>
# CONTENT_LENGTH
# WINDIR C:\Windows
# USERDOMAIN L-PC
# SERVER_PORT 8000
# SESSIONNAME Console
# QUERY_STRING
# CSRF_COOKIE cq82rWEKolufJRrO6u4Ib4VKHapMuC4nJzhLnLMDEpDeNVhjx7AtEjqZP10DbMqu
# HTTP_ACCEPT_ENCODING gzip, deflate, sdch
# PYTHONPATH C:\Users\L\PycharmProjects\Django项目\Day_21
# ERLANG_HOME C:\Program Files\erl8.1
# COMMONPROGRAMW6432 C:\Program Files\Common Files
# HTTP_UPGRADE_INSECURE_REQUESTS 1
# NUMBER_OF_PROCESSORS 4
# ASL.LOG Destination=file
# SERVER_PROTOCOL HTTP/1.1
# PROCESSOR_LEVEL 6
# USERNAME L
# PROGRAMFILES(X86) C:\Program Files (x86)
# SYSTEMROOT C:\Windows
# ALLUSERSPROFILE C:\ProgramData
# wsgi.multiprocess False
# FP_NO_HOST_CHECK NO
# HTTP_ACCEPT_LANGUAGE zh-CN,zh;q=0.8
# PROCESSOR_REVISION 4501
# SERVER_SOFTWARE WSGIServer/0.2
# OS Windows_NT
# COMSPEC C:\Windows\system32\cmd.exe
# SYSTEMDRIVE C:
# PUBLIC C:\Users\Public
# LOCALAPPDATA C:\Users\L\AppData\Local
# HOMEPATH \Users\L
# HTTP_USER_AGENT Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36
# PSMODULEPATH C:\Windows\system32\WindowsPowerShell\v1.0\Modules\
# PROGRAMDATA C:\ProgramData
# wsgi.url_scheme http
# TEMP C:\Users\L\AppData\Local\Temp
# RUN_MAIN true
# PROCESSOR_IDENTIFIER Intel64 Family 6 Model 69 Stepping 1, GenuineIntel
# wsgi.multithread True
# PROCESSOR_ARCHITECTURE x86
# COMMONPROGRAMFILES C:\Program Files (x86)\Common Files
# PYCHARM_HOSTED 1
# wsgi.input <_io.BufferedReader name=832>
# DJANGO_SETTINGS_MODULE Day_21.settings
# SERVER_NAME L-PC
# COMPUTERNAME L-PC
# USERPROFILE C:\Users\L
# HTTP_HOST 127.0.0.1:8000
# HTTP_ACCEPT text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
# PATHEXT .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
# PROCESSOR_ARCHITEW6432 AMD64
# PYTHONUNBUFFERED 1
# PYTHONIOENCODING UTF-8
# APPDATA C:\Users\L\AppData\Roaming
# wsgi.run_once False print(request.environ['HTTP_HOST'])
return HttpResponse('OK')
Django基础-》》http://www.cnblogs.com/lianzhilei/p/6137137.html
《第十九章》
Python开发【Django】:路由规则的更多相关文章
- 24.Django路由规则
路由规则 1.基于正则的url 在templates目录下创建index.html.detail.html文件 (1)index.html <!DOCTYPE html> <html ...
- 2.Django路由规则
路由规则 1.基于正则的url 在templates目录下创建index.html.detail.html文件 (1)index.html <!DOCTYPE html> <html ...
- 【python】-- Django路由系统(网址关系映射)、视图、模板
Django路由系统(网址关系映射).视图.模板 一.路由系统(网址关系映射) 1.单一路由对应: 一个url对应一个视图函数(类) urls.py: url(r'^test', views.test ...
- Python学习---Django路由系统【all】
Django URL (路由系统) Django URL (路由系统): URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映 ...
- Python开发【第二十一篇】:Web框架之Django【基础】
Python开发[第二十一篇]:Web框架之Django[基础] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5237704.html Python之 ...
- Python开发【第二十二篇】:Web框架之Django【进阶】
Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...
- Python自动化开发 - Django【基础篇】
Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为: 大而全,框架本身集成了ORM.模型绑定.模板引擎.缓存.Session等诸多功能 ...
- python的Web框架:Django路由系统以及模板导入
Django的路由系统 当一个请求来到时 当一个请求来到时 1.首先到项目目录下的urls.py(根URLconf模块)中,查找路由规则: 2.根URELcof模块,里面定义了 urlpatterns ...
- 《Python高效开发实战》实战演练——开发Django站点1
6.2 实战演练:开发Django站点 用Django开发网站需要遵循Django的一套开发流程.本节通过建立一个消息录入页面演示Django的开发流程及相关技术. 6.12.1 建立项目 在进行D ...
随机推荐
- Linux新手要了解的十个知识点
Linux对于有的新手来说,感觉无从下手,或者不知道从哪儿学起?怎么学?针对这些问题,我给大家说说新手学习Linux需要了解的十个知识点. 注意大小写 Linux是大小写敏感的系统,举个例子,Mozi ...
- Spring-导入和混合配置
javaConfig模式下: 导入: @Import({XX.class,YY.class,...}) 混合: @ImportResource("classpath:xxx.xml" ...
- COOKIE和SESSION关系和区别等
一.cookie介绍 cookie 常用于识别用户.cookie 是服务器留在用户计算机中的小文件.每当相同的计算机通过浏览器请求页面时,它同时会发送 cookie.通过 PHP,您能够创建并取回 c ...
- Nginx伪静态配置和常用Rewrite伪静态规则集锦
伪静态是一种可以把文件后缀改成任何可能的一种方法,如果我想把php文件伪静态成html文件,这种相当简单的,下面我来介绍nginx 伪静态配置方法 nginx里使用伪静态是直接在nginx.conf ...
- 前端架构一之XAMPP
摘要: 随着用户体验的重要性和项目的富客户端化,越来越多的公司将前端与后端分离开来,这时候前端就需要有自己的服务环境.本文将介绍我在开发中所用到的前端服务环境的搭建. 环境: OS: win7 64b ...
- [BestCoder Round #5] hdu 4956 Poor Hanamichi (数学题)
Poor Hanamichi Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- DAGDGC特殊调弦
DAGDGC 特殊调弦 重要知识点: 1)音高从高到低排序为:BAGFEDC 2)吉他标准音是(1到6弦) EBGDAE 3)吉他同一弦,每相差一个品级,相差是半个音 调弦方法:1)第一弦(E-> ...
- ftp简单命令
1.连接ftp ftp 192.168.10.15 进去后输入用户名 ,然后再输入密码,就这样登陆成功了,你会看到 ftp> 2.进入ftp后,你对目录需要切换操作.和linux一样的命令.cd ...
- linux连接sybase数据库-isql
转自:http://blog.knowsky.com/196438.htm 想要linux连接sybase数据库用命令isql: isql [-U login id] [-P password] [- ...
- 查看系统进程:ps
ps命令用于查看系统进程,常见用法如下: [root@localhost ~]$ ps aux # 查看所有的进程 [root@localhost ~]$ ps aux | grep nginx # ...