zoukankan      html  css  js  c++  java
  • Django框架详细介绍---request对象

    几个重要的函数

    1.HttpRequest.get_host()

      根据从HTTP_X_FORWARDED_HOST(如果打开 USE_X_FORWARDED_HOST,默认为False和 HTTP_HOST 头部信息返回请求的原始主机。如果这两个头部没有提供相应的值,则使用SERVER_NAME 和SERVER_PORT,在PEP 3333 中有详细描述

      USE_X_FORWARDED_HOST是一个布尔值,用于指定是否优先使用 X-Forwarded-Host 首部,仅在代理设置了该首部的情况下,才可以被使用。   

    示例:

    "127.0.0.1:8000"

    注意:

      当主机位于多个代理后面时,get_host() 方法将会失败。除非使用中间件重写代理的首部

    2.HttpRequest.get_full_path()

      获取当前URL从主机或者端口的第一个"/"到URL末尾的字符串

    示例:

    URL:
        http://127.0.0.1:8000/login/?next=/book_list/
    获取结果:
        /login/?next=/book_list/

    用法:

      从一个视图跳转到另外一个视图时,在URL后通过key-value的形式拼接成跳转后的URL,这样子结合get_full_path()和request.GET.get("key")获取到跳转前的URL并跳转回去

    示例:在访问某个页面时,如未进行登录认证先跳转到登录界面完成认证再跳转到指定页面

    <!--request.get_full_path 获取拼接得到的URL-->
    <form action="{{ request.get_full_path }}" method="post">
        {% csrf_token %}
        <p>用户名:<input type="text" name="username"></p>
        <p>密码:<input type="password" name="pwd"></p>
        <p><input type="submit" value="登录"></p>
        <p style="color: red">{{ err_msg }}</p>
    </form>

    访问图书列表时需要先登录:

    def book_list(request):
        # 判断请求里是否有键值对,也就是验证是否登录
        login_flag = request.get_signed_cookie("login", default="", salt="jiayanchuli")
        # 查看获取收到的是什么
        print(login_flag)
        if login_flag == "ok":
            # 查找出所有书籍
            books = models.Book.objects.all()
            # 统计书籍数量
            total_num = books.count()
            # 从url中提取出来当前访问的具体页码
            current_page = request.GET.get("page")
            from utils import mypage
            page_obj = mypage.Page(total_num, current_page, 'book_list')
            # 当前页码应该展示的书籍数据
            books_list = books[page_obj.data_start:page_obj.data_end]
            # 生成分页的页码
            page_html = page_obj.page_html()
            # 在页面上展示出来
            return render(request,
                          "book_list.html",
                          {"book_list": books_list,
                           "page_html": page_html},
                          )
        # 获取当前访问的URL
        url = request.path_info
       # 拼接URL,并跳转
    return redirect("/login/?next={}".format(url))

    登录视图上:

    def login(request):
        if request.method == "POST":
            username = request.POST.get("username")
            password = request.POST.get("pwd")
            user_obj = models.User.objects.filter(username=username, password=password)
            if user_obj:
           # 通过get("key"),获取登录前跳转到的URL
                url = request.GET.get("next")
                print(url)
                rep = redirect(url)
                rep.set_signed_cookie("login", "ok", salt="jiayanchuli")
                return rep
            else:
                return render(request,
                              "login.html",
                              {"err_msg": "用户名或密码错误"})
        return render(request, "login.html")

    3.HttpRequest.get_path_info()

      获取到主机或者端口号之后第一个"/"与问号之间的字符串

    URL:
        http://127.0.0.1:8000/login/?next=/book_list/
    获取结果:
        /login/

    4.HttpRequest.build_absolute_uri(location)

      获取location的绝对URL,如果没有提供该参数则默认使用get_full_path()的返回值,如果URI已经是一个绝对URI,则将不会修改,否则将使用请求中的服务器相关的变量构成绝对URI

    URL:
        http://127.0.0.1:8000/login/?next=/book_list/
    获取结果:
        http://127.0.0.1:8000/login/?next=/book_list/

    5.HttpRequest.get_signed_cookie(key, default=RAISE_ERROR, salt="", max_age=None)

      返回签名的Cookie对应的值,如果签名不再合法则返回django.core.signing.BadSignature,如果提供了default参数,将不会引发异常并返回该默认值

      可选参数salt,可用来第安全密钥进行加盐提高安全度,max_age参数用来检查Cookie对应的时间戳以确保Cookie的时间不会超过max_age(单位:秒)

  • 相关阅读:
    解决SharePoint 文档库itemadded eventhandler导致的上传完成后,编辑页面保持报错的问题,错误信息为“该文档已经被编辑过 the file has been modified by...”
    解决SharePoint 2013 designer workflow 在发布的报错“负载平衡没有设置”The workflow files were saved but cannot be run.
    随机实例,随机值
    Spring4笔记
    struts2笔记(3)
    struts2笔记(2)
    获取文本的编码类型(from logparse)
    FileUtil(from logparser)
    DateUtil(SimpleDateFormat)
    struts2笔记
  • 原文地址:https://www.cnblogs.com/mdzzbojo/p/9231024.html
Copyright © 2011-2022 走看看