一、URL配置
项目中找到settings.py配置文件,该配置文件中的ROOT_URLCONF指定的是根路径的配置文件,如下:
ROOT_URLCONF = 'test3.urls'
该信息指定的是根路径的配置文件是test3项目下的urls.py文件,如下:
from django.conf.urls import url,include from django.contrib import admin from django.urls import path urlpatterns = [ path(r'admin/', admin.site.urls), path(r'booktest/', include('booktest.urls')), ]
这里指定了2个path地址:
booktest的url配置文件内容如下:
from django.conf.urls import url from booktest import views urlpatterns = [ url('index/', views.index), url('\d+/', views.detail) ]这里提供了2个地址,第一个是index的访问地址,以及detail的访问地址
二、创建视图
视图是创建在应用的views.py文件中,创建的视图需要与urls.py文件中配置的url地址匹配,并且与templates中的页面匹配才能正常访问
2.1、
此时配置完成可以启动服务:
python manage.py runserver 8000
三、错误视图
Django原生自带几个默认视图用于处理HTTP错误,需要注意如下配置:
四、HttpRequest对象
当一个页面被请求时,Django就会创建一个包含本次请求原信息的HttpRequest对象。
Django会将这个对象自动传递给响应的视图函数,一般视图函数约定俗成地使用 request 参数承接这个对象。示例如下:
from django.shortcuts import render from django.http import HttpResponse def index(request): return HttpResponse(request.path) def detail(request): return HttpResponse('hello world') # 展示链接的页面 def getTest1(request): return render(request, 'booktest/getTest1.html') # 接收一键一值的情况 def getTest2(request): # 根据建接收值 a = request.GET['a'] b = request.GET['b'] c = request.GET['c'] # 构造上下文 context = {'a':a,'b':b,'c':c} # 向模板中传递上下文,并进行渲染 return render(request, 'booktest/getTest2.html',context) # 接收一键多值的情况 def getTest3(request): # 根据建接收值 a = request.GET.getlist('a') # 构造上下文 context = {'a': a} return render(request, 'booktest/getTest3.html',context) def postTest1(request): return render(request, 'booktest/postTest1.html') def postTest2(request): uname = request.POST['uname'] upwd = request.POST['upwd'] ugender = request.POST.get('ugender') uhobby = request.POST.getlist('uhobby') context = {'uname':uname,'upwd':upwd,'ugender':ugender,'uhobby':uhobby} return render(request, 'booktest/postTest2.html',context)
HttpRequest属性:
HttpRequest方法:
五、QueryDict对象
在HttpRequest对象中, GET和POST属性是django.http.QueryDict类的实例。 QueryDict类似字典的自定义类,用来处理单键对应多值的情况。因为一些HTML form元素,例如,
QueryDict对象是immutable(不可更改的),除非创建它们的copy()。这意味着我们不能直接改变request.POST and request.GET的属性。
QueryDict方法:
六、HttpResponse对象
对于HttpRequest对象来说,是由Django自动创建。但是,HttpResponse对象就必须我们自己创建。每个View方法必须返回一个HttpResponse对象。HttpResponse类在django.http.HttpResponse。
HttpResponse属性:
HttpResponse方法:
HttpResponse子类:
七、JsonResponse对象
Json是目前常用的一种数据格式,有时候我们需要返回一个Json格式的数据,而 JsonResponse 提供了一个快捷的方法。它是 HttpResponse 的一个子类,用来帮助用户创建JSON 编码的响应。它从父类继承大部分行为,下面看起构造函数:
class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs)
参数说明:
示例:
>>> from django.http import JsonResponse
>>> response = JsonResponse({'foo': 'bar'})
>>> response.content
'{"foo": "bar"}'
八、StreamingHttpResponse对象
StreamingHttpResponse类被用来从Django流式化一个响应(response)到浏览器。当生产的响应太长或者占用太多的内存的时候,你可能会使用到它。例如,它对于生成大型CSV文件非常有用。
性能方面的考虑:
django是为了短链接而设计的,也就是说每次响应完毕之后都会断开连接。流式响应将会为整个响应期协同工作进程。这可能导致性能变差。总的来说,你需要将代价高的任务移除 请求—响应 的循环,而不是求助于流式响应。
StreamingHttpResponse 不是 HttpResponse 的衍生类(子类),因为它实现了完全不同的应用程序接口(API)。尽管如此,除了以下的几个明显不同的地方,其他几乎完全相同:
属性:
StreamingHttpResponse.streaming_content:一个迭代器,包含内容字符串。
StreamingHttpResponse.status_code:响应的状态码
StreamingHttpResponse.reason_phrase:响应的原因短语
StreamingHttpResponse.streaming:总是True,表示其是一个流式响应。
九、FileResponse对象
FileResponse是StreamingHttpResponse的衍生类(子类),为二进制文件做了优化。如果 wsgi server 来提供,则使用了wsgi.file_wrapper ,否则将会流式化一个文件为一些小块。
示例:(FileResponse 需要通过二进制模式打开文件)
>>> from django.http import FileResponse
>>> response = FileResponse(open('myfile.png', 'rb'))