Django(2)

[复制链接]
发表于 2026-1-6 21:09:15 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
接上文
哀求相应对象

哀求 HttpRequest

        request对象中包罗了哀求方式哀求头等信息,访问方式如下:
  1. def http_request(request):
  2.     print(request.method)       # 获取请求方式
  3.     header = request.META  # 获取请求头信息
  4.     print(header)
  5.     ua = request.META.get("HTTP_USER_AGENT", None)
  6.     print(ua)      # 获取请求头信息的内容
  7.     # 获取请求参数
  8.     name = request.GET.get("name", "无数据")
  9.     print(name)
  10.     return HttpResponse("http request success")
复制代码
        request.META是一个字典,也可以使用request.META["HTTP_USER_AGENT"]访问。
        服务器根据欣赏器发送的哀求举行相应。
相应HttpResponse

自界说相应状态码

  1. resp = HttpResponse("响应状态码内容字符串", status=201)
  2. # eg:
  3. resp = HttpResponse("登录失败", status=601)
复制代码
向cookie添加信息

        cookie是欣赏器存放在用户当地的信息,欣赏器关闭cookie删除。也可以自界说cookie的生存时间。
        cookie中的数据以key:value的情势存储,set_cookie方法第一个参数是key,第二个是value。
  1.     resp = HttpResponse("响应cookie")
  2.     # 设置cookie值
  3.     resp.set_cookie("username","hd")
  4.     resp.set_cookie("pwd","hddd")
复制代码
         cookie通过max_age参数设置逾期时间。多个cookie只在一行上加即可。
  1. resp.set_cookie("username","hd", max_age=7*24*60*60)
复制代码
JsonResopnse 

        相应JSON格式数据#JSON是前后端通报数据的标准格式数据内容由key:value构成,在json可以通过符号体现对象及列表。
        包罗的数据范例:字符、数字、布尔、对象、列表。如下:
  1. from django.http import HttpResponse, JsonResponse
  2. def http_response(request):
  3. user_info  ={
  4.     id:1,
  5.     name:"阿巴阿巴",
  6.     like:["唱","跳","rap","篮球"]
  7. }
  8. return JsonResponse(user_info)
复制代码
FileResponse

用文件做为哀求的相应,传输不符合欣赏器标准的文件
  1. response = FileResponse(open("a.txt","rb"))
  2. return response
复制代码
重定向

重定向可以跳转到另一个页面
在demo中访问article_detail时假如参数的id大于1000就会重定向到no_data_404上
  1. def no_data_404(request):
  2.     return HttpResponse("404")
  3. def article_detail(request, article_id):
  4.     if article_id > 1000:
  5.         return HttpResponseRedirect("/hello/404/")      # 重定向至站点内部视图名   如果id大于1000则表示文章不存在,重定向至404页面
  6.         # return redirect("http://www.baidu.com")       # 重定向到内部视图名或url地址或外部资源
  7.     return HttpResponse(f"article{article_id}")
复制代码
重定向有两种方法,HttpResponseRedirect("内部url") 或 redirect("http://www.baidu.com")。
HttpResponseRedirect方法可以访问网站内部资源,redirect可以访问外部资源。
记得加return!!!!!!!!!!!!!!!!!!

重写内置视图

视图函数

这里我们写在hello模块中
  1. def page_500(request):
  2.     return HttpResponse("错误500")
复制代码
修改默认页面的指向 

在主模块的urls中添加一个变量
  1. urlpatterns = []
  2. handler500 = 'hello.views.page_500'
复制代码
设置setting中的debug

27行左右
  1. DEBUG = False
复制代码
 如许出现500错误就会跳转到我们自界说的页面了。
测试

恣意找一个视图函数让它触发非常
raise是触发非常的代码
  1. def render_str(request):
  2.     raise
  3.     return render(request, "index.html")
复制代码
访问这个视图的时间就会发生错误,然后跳转到自界说的500页面。
django的内置视图



  • handler404
  • handler500
  • handler403
  • handler400
静态资源

设置静态资源
在项目文件夹下创建一个静态资源文件夹,这个文件夹专门用来存放静态资源(图片等)

打开主项目标setting

        MEDIA_URL 用于设置访问地点,云云文件夹中放有1.jpg 则在欣赏器中访问127.0.0.1:8000/media/1.jpg
        MEDIA_ROOT 用于设置静态资源存放的地点,以下代码寄义是当前项目根目次下的medias文件夹。
  1. MEDIA_URL = "/media/"   # 配置资源目录访问地址
  2. MEDIA_ROOT = os.path.join(BASE_DIR,"medias")    # 存放静态资源目录
复制代码
 打开urls,在末了添加上如下代码即可在欣赏器中直接访问静态资源了(条件是在debug模式下)
  1. from django.views.static import serve
  2. from test_django import settings
  3. if settings.DEBUG:
  4.     urlpatterns += [
  5.         re_path(r"^media/(?P<path>.*)$",
  6.                 serve, {
  7.                     "document_root": settings.MEDIA_ROOT
  8.                 }
  9.         ),
  10.     ]
复制代码
用class重写视图

写一个类继承TemplateView,设置属性template_name 为template中的一个html文件,一个类视图就创建好了。
  1. from django.views.generic import TemplateView
  2. class HomeView(TemplateView):
  3.     template_name = "home.html"
复制代码
urls设置如下:
as.view()可以将类转换成视图
  1. path('homeview/', HomeView.as_view(), name='HomeView'),
复制代码



回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表