url控制器:
主要是用于url的分发功能,如用户输入:127.0.0.1:8080/apptest
配置url才能使django正确识别用户的输入
未配置url报错类型如下:
进行正确的url配置:
打开项目下的urls.py文件:
初始urls文件如下:
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r‘^admin/‘, admin.site.urls),
]
在urlpatterns这个字典内进行你的url配置
如:
首先应该导入你的视图函数:from appname import views
url(regex,view,kwargs),填写路径的正则表达式,这样才可以匹配到输入的url,第二个参数调用视图内的处理函数:url()后必须加逗号用于与其他url的区别,不然django无法识别
一个基本的请求响应就是:用户输入url-------url控制器进行匹配------寻找相应的视图内与之对应的处理函数
from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
url(r‘^admin/‘, admin.site.urls),
url(r‘show_time/‘, views.show_time),
]
随后在views.py进行对应url处理函数的代码,这里处理函数尽量与路径名称有一些关联性,出错的话也好找到进行修改
视图中的show_time()处理函数:
from django.shortcuts import render,HttpResponse
import time
...
...
...
def show_time(request): 函数的参数必须有,接受http请求与处理都封存在参数内
times = time.time()
return HttpResponse(times) # 作为测试 这里返回一个http响应
启动这个webapp:
1.
cmd或者pycharm下的cmd:
命令:python manage.py runserver 8080 这里的端口号不要填被占用的端口号就行
2.
pycharm右上角的运行log也可以运行当前项目的webapp
url的命名规则分为两种:1、无命名规则 2、有命名规则
第一种:
url匹配的正则只要能够匹配上就行 ,如 url(r‘/d+/d+‘,) 只要输入的url有数字 则django就可以找到再到视图中寻找处理的函数
第二种:
正则表达式进行分组:如url(r‘^article/(?P<year>(\\d+))/(?P<month>\\d+)‘,views.article_year_month) 命名url,函数参数必须与命名形式相同 对应的函数及参数:article_year_month(request, year, month)
url的分发功能:
这种问题的出发点就在于如果一个项目有很多web应用和大量的url,url匹配全部写在urls.py下,出错不易寻找,调理不清晰,所以url分发是一个很重要的一点。
特点:将与web应用对应的url放在应用下,新建urls.py,如图黄色标注的为新建的;红色标注的为主路由
这样看起来条例清晰了很多,blog下的子链全部放在blog下的urls内:
项目主路由对应的urls内说明了分发功能该如何使用:
Including another URLconf
1. Import the include() function: from django.conf.urls import url, include
2. Add a URL to urlpatterns: url(r‘^blog/‘, include(‘blog.urls‘))
用法:在主路由urls这样修改:新增URLconf下的include模块
from django.conf.urls import url, include
urlpatterns增加如下内容:
假如你有两个webapp:一个是blog 一个为pay
urlpatterns = [
url(r‘^blog/‘, include(‘blog.urls‘)),
url(r‘pay/‘, include(‘pay.urls‘))
......
.......
]
然后到对应的webapp下urls内添加代码:
"""
url分发功能,将urls子链分配到每一个webAPP下urls
"""
from django.conf.urls import url
from blog import views
urlpatterns = [
# url(r‘^clock_time/‘, views.clock_time),
]
这样的话再到浏览器进行访问:url就应该这么写才能访问到,因为这个子链已经被分配到blog下的url
views视图模块:
http请求产生两个核心对象:
http请求:HttpRequest对象
http响应:HTTPResponse对象
所在位置:django.http
HttpRequest对象
class HttpRequest[source]
属性
除非另有说明,否则所有属性均应视为只读。
HttpRequest.scheme
表示请求方案的字符串(http或https 通常)。
HttpRequest.body
原始HTTP请求主体作为字节字符串。这对于以不同于传统html表单的方式处理数据很有用:二进制图像,XML有效载荷等。为了处理传统表单数据,请使用 HttpRequest.POST。
您也可以HttpRequest使用类似文件的界面进行阅读。看 HttpRequest.read()。
HttpRequest.path
表示请求页面的完整路径的字符串,不包括方案或域。
例: "/music/bands/the_beatles/"
HttpRequest.path_info
在某些Web服务器配置下,主机名后的URL部分被分成脚本前缀部分和路径信息部分。path_info无论使用什么Web服务器,该属性始终包含路径的路径信息部分。使用此代替path可以使代码更容易在测试和部署服务器之间移动。
例如,如果WSGIScriptAlias你的应用程序设置为 "/minfo",则path可能是"/minfo/music/bands/the_beatles/" 和path_info会"/music/bands/the_beatles/"。
HttpRequest.method
表示请求中使用的HTTP方法的字符串。这保证是大写的。例如:
if request.method == ‘GET‘:
do_something()
elif request.method == ‘POST‘:
do_something_else()
HttpRequest.encoding
表示当前编码的字符串,用于解码表单提交数据(或者None,表示使用该DEFAULT_CHARSET设置)。您可以写入此属性来更改访问表单数据时使用的编码。任何后续的属性访问(例如读取GET或POST)将使用新encoding值。如果您知道表单数据不在DEFAULT_CHARSET 编码中,这很有用。
HttpRequest.content_type
表示请求的MIME类型的字符串,从CONTENT_TYPE标头解析 。
HttpRequest.content_params
包含在CONTENT_TYPE 标题中的键/值参数字典。
HttpRequest.GET
包含所有给定的HTTP GET参数的类似字典的对象。请参阅QueryDict下面的 文档。
HttpRequest.POST
包含所有给定的HTTP POST参数的类似字典的对象,前提是请求包含表单数据。请参阅QueryDict下面的 文档。如果您需要访问请求中发布的原始数据或非表单数据,请HttpRequest.body改为通过属性访问此数据 。
有可能请求可以通过POST发送一个空POST 字典 - 例如,如果通过POST HTTP方法请求表单但不包含表单数据。因此,您不应该使用 检查POST方法的用法; 相反,使用(见)。if request.POSTif request.method == "POST"HttpRequest.method
POST它不包含文件上传信息。看FILES。
HttpRequest.COOKIES
包含所有Cookie的字典。键和值是字符串。
HttpRequest.FILES
包含所有上传文件的类似字典的对象。每个关键 FILES是name从。每个值都是一个。<input type="file" name="" />FILESUploadedFile
FILES将只包含数据,如果请求方法是POST和<form>发布到请求的方法 enctype="multipart/form-data"。否则,FILES将是一个空白字典式的对象。