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进阶的更多相关文章

  1. Python之路(第二十九篇) 面向对象进阶:内置方法补充、异常处理

    一.__new__方法 __init__()是初始化方法,__new__()方法是构造方法,创建一个新的对象 实例化对象的时候,调用__init__()初始化之前,先调用了__new__()方法 __ ...

  2. 第十九章 Django的ORM映射机制

    第十九章 Django的ORM映射机制 第一课 Django获取多个数据以及文件上传 1.获取多选的结果(checkbox,select/option)时: req.POST.getlist('fav ...

  3. Python学习(三十九)—— Django之Form组件

    一.构建一个表单 假设你想在你的网站上创建一个简单的表单,以获得用户的名字.你需要类似这样的模板: <form action="/your-name/" method=&qu ...

  4. Python之路(第十九篇)hashlib模块

    一.hashlib模块 HASH Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射,pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值 ...

  5. Python之路(第二十八篇) 面向对象进阶:类的装饰器、元类

    一.类的装饰器 类作为一个对象,也可以被装饰. 例子 def wrap(obj): print("装饰器-----") obj.x = 1 obj.y = 3 obj.z = 5 ...

  6. Python之路(第二十六篇) 面向对象进阶:内置方法

    一.__getattribute__ object.__getattribute__(self, name) 无条件被调用,通过实例访问属性.如果class中定义了__getattr__(),则__g ...

  7. python 教程 第十九章、 图形界面编程

    第十九章. 图形界面编程 import Tkinter top = Tkinter.Tk() hello = Tkinter.Label(top, text='Hello World!') hello ...

  8. 第二十二章 Django会话与表单验证

    第二十二章 Django会话与表单验证 第一课 模板回顾 1.基本操作 def func(req): return render(req,'index.html',{'val':[1,2,3...]} ...

  9. 第十九章——使用资源调控器管理资源(1)——使用SQLServer Management Studio 配置资源调控器

    原文:第十九章--使用资源调控器管理资源(1)--使用SQLServer Management Studio 配置资源调控器 本系列包含: 1. 使用SQLServer Management Stud ...

随机推荐

  1. python常见数据类型

    字符串 字符串是 Python 中最常用的数据类型.我们可以使用引号('或")来创建字符串. 创建字符串烦人过程其实很简单,只需为变量分配一个值即可.例如: var = 'Hello Wor ...

  2. 【Java EE 学习 36】【struts2】【struts2系统验证】【struts2 ognl值栈】【struts2 ongl标签】【struts2 UI标签】【struts2模型驱动和令牌机制】

    一.struts2系统验证 1.基于struts2系统验证的方式实际上就是通过配置xml文件的方式达到验证的目的. 2.实际上系统校验的方法和手工校验的方法在底层的基本实现是相同的.但是使用系统校验的 ...

  3. 【Java EE 学习 35 下】【struts2】【struts2文件上传】【struts2自定义拦截器】【struts2手动验证】

    一.struts2文件上传 1.上传文件的时候要求必须使得表单的enctype属性设置为multipart/form-data,把它的method属性设置为post 2.上传单个文件的时候需要在Act ...

  4. js整理4

    异步处理 错误处理 同步 function A() { B(); } function B() { C(); } function C() { throw new Error('something h ...

  5. psql-09表:视图和索引

    视图 由查询语句定义的虚拟表;从视图中看到的数据可能来自数据库中的一张或多张表,也可能来自外部; 使用视图的原因一般有: 使复制的查询易于理解和使用; 安全原因; 表一些函数返回的结果映射成视图; 一 ...

  6. Spring Bean后处理器以及容器后处理器【转】

    Bean后处理器:即当spring容器实例化Bean实例之后进行的增强处理. 容器后处理器:对容器本身进行处理,并总是在容器实例化其他任何Bean之前读取配置文件的元数据并可能修改这些数据. 一.Be ...

  7. 【Oracle】oracle中快速判断某一日期是闰年或平年

    )),' then '平年' else '闰年' end as isLeapYear from dual 第一步:取日期的年初日期:第二步:年初日期增加一个月即概念2月:第三步:取概念2月的最后一天的 ...

  8. mysql数据去除重复及相关优化(转)

    由于mysql不支持同时对一张表进行操作,即子查询和要进行的操作不能是同一张表,因此需要通过临时表中专以下. 1.单字段重复 生成临时表,其中uid是需要去重的字段 create table tmp_ ...

  9. JS:event对象下的target属性和取消冒泡事件

    1.target 通过获取DOM元素 var box = document.getElementById("box"); document.box.onclick = functi ...

  10. JDBC、JTA、Spring的事务管理

    Java事务的类型有三种:JDBC事务.JTA(Java Transaction API)事务.容器事务. 事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么 ...