Django(2)

上文

请求响应对象

请求 HttpRequest

request对象中包含了请求方式请求头等信息,访问方式如下:

python 复制代码
def http_request(request):
    print(request.method)       # 获取请求方式
    header = request.META  # 获取请求头信息
    print(header)
    ua = request.META.get("HTTP_USER_AGENT", None)
    print(ua)      # 获取请求头信息的内容

    # 获取请求参数
    name = request.GET.get("name", "无数据")
    print(name)
    return HttpResponse("http request success")

request.META是一个字典,也可以使用request.META"HTTP_USER_AGENT"访问。

服务器根据浏览器发送的请求进行响应。

响应HttpResponse

自定义响应状态码

python 复制代码
resp = HttpResponse("响应状态码内容字符串", status=201)
# eg:
resp = HttpResponse("登录失败", status=601)

向cookie添加信息

cookie是浏览器存放在用户本地的信息,浏览器关闭cookie删除。也可以自定义cookie的生存时间。

cookie中的数据以key:value的形式存储,set_cookie方法第一个参数是key,第二个是value。

python 复制代码
    resp = HttpResponse("响应cookie")
    # 设置cookie值
    resp.set_cookie("username","hd")
    resp.set_cookie("pwd","hddd")

cookie通过max_age参数设置过期时间。多个cookie只在一行上加即可。

python 复制代码
resp.set_cookie("username","hd", max_age=7*24*60*60)

JsonResopnse

响应JSON格式数据#JSON是前后端传递数据的标准格式数据内容由key:value组成,在json可以通过符号表示对象及列表。

包含的数据类型:字符、数字、布尔、对象、列表。如下:

python 复制代码
from django.http import HttpResponse, JsonResponse
def http_response(request):
user_info  ={
    id:1,
    name:"阿巴阿巴",
    like:["唱","跳","rap","篮球"]
}
return JsonResponse(user_info)

FileResponse

用文件做为请求的响应,传输不符合浏览器标准的文件

python 复制代码
response = FileResponse(open("a.txt","rb"))
return response

重定向

重定向可以跳转到另一个页面

在demo中访问article_detail时如果参数的id大于1000就会重定向到no_data_404上

python 复制代码
def no_data_404(request):
    return HttpResponse("404")

def article_detail(request, article_id):
    if article_id > 1000:
        return HttpResponseRedirect("/hello/404/")      # 重定向至站点内部视图名   如果id大于1000则表示文章不存在,重定向至404页面
        # return redirect("http://www.baidu.com")       # 重定向到内部视图名或url地址或外部资源
    return HttpResponse(f"article{article_id}")

重定向有两种方法,HttpResponseRedirect("内部url") 或 redirect("http://www.baidu.com")。

HttpResponseRedirect方法可以访问网站内部资源,redirect可以访问外部资源。

记得加return!!!!!!!!!!!!!!!!!!

重写内置视图

视图函数

这里我们写在hello模块中

python 复制代码
def page_500(request):
    return HttpResponse("错误500")

修改默认页面的指向

在主模块的urls中添加一个变量

python 复制代码
urlpatterns = []
handler500 = 'hello.views.page_500'

配置setting中的debug

27行左右

python 复制代码
DEBUG = False

这样出现500错误就会跳转到我们自定义的页面了。

测试

随便找一个视图函数让它触发异常

raise是触发异常的代码

python 复制代码
def render_str(request):
    raise
    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文件夹。

python 复制代码
MEDIA_URL = "/media/"   # 配置资源目录访问地址
MEDIA_ROOT = os.path.join(BASE_DIR,"medias")    # 存放静态资源目录

打开urls,在最后添加上如下代码即可在浏览器中直接访问静态资源了(前提是在debug模式下)

python 复制代码
from django.views.static import serve
from test_django import settings

if settings.DEBUG:
    urlpatterns += [
        re_path(r"^media/(?P<path>.*)$",
                serve, {
                    "document_root": settings.MEDIA_ROOT
                }
        ),
    ]

用class重写视图

写一个类继承TemplateView,设置属性template_name 为template中的一个html文件,一个类视图就创建好了。

python 复制代码
from django.views.generic import TemplateView
class HomeView(TemplateView):
    template_name = "home.html"

urls配置如下:

as.view()可以将类转换成视图

python 复制代码
path('homeview/', HomeView.as_view(), name='HomeView'),
相关推荐
明月_清风3 小时前
加密解密系统完全指南:原理剖析与 Go 实践
后端
风吹夏回3 小时前
Python 全局异常处理:从“满屏 try-except”到优雅兜底
开发语言·python
小熊Coding3 小时前
Python爬取当当网二手图书项目实战!
开发语言·爬虫·python·beautifulsoup·requests·二手图书
秋93 小时前
Java项目运行5天左右自动宕机:系统性定位与解决方案
java·开发语言·python
小江的记录本3 小时前
【JVM虚拟机】垃圾回收GC:垃圾收集器:CMS:核心原理、回收流程、优缺点、废弃原因(附《思维导图》+《面试高频考点清单》)
java·jvm·后端·python·spring·面试·maven
田里的水稻4 小时前
OE_ubuntu26.04与宿主机之间复制粘贴内容
人工智能·python·机器人
冬奇Lab4 小时前
每日一个开源项目(第105篇):Twenty - 跳出 Salesforce 的圈套,定义现代开源 CRM
前端·后端·开源
jiayong235 小时前
02 创建虚拟环境
python
旺仔来了5 小时前
不联网的Linux下部署python环境
linux·开发语言·python
ServBay6 小时前
月之暗面 Kimi Code 0.4.0 发布,终端 AI 编码助手全面采用 TypeScript,实现毫秒级启动
后端·aigc·ai编程