• 请求与相应


    请求与相应


    HttpRequest的常用属性和方法

    • path:一个字符串,表示请求的页面的完整路径,不包括域名
    • method: 一个字符串,表示请求使用的的HTTP方法,常用值包括:'GET', 'POST'。
    • encoding:一个字符串,表示提交的数据的编码方式
      • 如果为None则表示使用浏览器的默认设置,一般为utf-8
      • 这个属性是可以写的,可以通过修改它来修改访问表单数据使用的编码,接下来对属性的任何访问将使用新的encoding值
    • GET: 一个类似字典的对象,包含get请求方式的所有参数
    • POST: 一个类似字典的对象,包含post请求的所有参数
    • FILES: 一个类似字典的对象,包含所有的上传文件
    • COOKIES: 一个标准的python字典,包含所有的cookie,键和值都为字符串
    • session:一个既可读又可写的类似字符串的对象,表示当前的会话,只有当django启用会话的支持时才可用。
    • is_ajax(): 如果请求是通过XMLHttpRequest发起的,则返回True。

    csrf_token

    • CSRF(Cross Site Request Forgery, 跨站域请求伪造)是一种网络的攻击方式
    • django为了解决这种攻击机制,增加了csrf_token验证。一般会在form表单里面加上模板标签{% csrf_token %}生成csrf_token,便于后台验证。
       1 <!DOCTYPE html>
       2 <html lang="en">
       3 <head>
       4     <meta charset="UTF-8">
       5     <title>Title</title>
       6 </head>
       7 <body>
       8     <h1>login</h1>
       9 
      10     <form action="" method="post" >
      11         {% csrf_token %}
      12         <p>用户名<input type="text" name="username"></p>
      13         <p>密码<input type="password" name="password"></p>
      14         <p><input type="submit" value="提交"></p>
      15     </form>
      16 </body>
      17 </html>

      form表单插入csrf_token

       1 from django.shortcuts import render, HttpResponse, redirect, reverse
       2 
       3 
       4 def login(request):
       5     if request.method == 'POST':
       6         username = request.POST.get('username', '')
       7         password = request.POST.get('password', '')
       8         print(username, password)
       9         if username == 'admin' and password == '123':
      10             return redirect(reverse('crm:index'))
      11     return render(request, 'crm/login.html')

      登录视图函数

    • 禁用csrf:@csrf_exempt

    捕捉请求参数

    • request.GET.get(key):捕捉一个参数的单个值.
    • request.GET.getlist(key):捕捉一个参数的总值数,一键多值型号    //value=math&value=Chinese&value=English.

    文件上传

    • 设置存储路径
      • 在项目的根目录下新建upload文件夹.
      • 在settings里面设置: UPLOAD_ROOT = os.path.join(BASE_DIR, 'upload').
    • 简单前端页面
       1 <!DOCTYPE html>
       2 <html lang="en">
       3 <head>
       4     <meta charset="UTF-8">
       5     <title>Title</title>
       6 </head>
       7 <body>
       8     <h1>文件上传</h1>
       9     <form action="" method="post" enctype="multipart/form-data">
      10         {% csrf_token %}
      11         <input type="file" name="file" >
      12         <input type="submit">
      13     </form>
      14 </body>
      15 </html>
    • 后台处理
       1 from django.shortcuts import render, HttpResponse, redirect, reverse
       2 import os
       3 from untitled4.settings import UPLOAD_ROOT
       4 
       5 def upload(request):
       6     from datetime import datetime
       7     if request.method == 'POST':
       8         files = request.FILES.get('file', None)
       9         if files:
      10             dirs = datetime.now().strftime('%Y%m%d')
      11             current_dir = os.path.join(UPLOAD_ROOT, dirs)
      12             if not os.path.exists(current_dir):
      13                 os.mkdir(current_dir)
      14             file_name = os.path.join(current_dir, files.name)
      15             with open(file_name, 'wb') as f:
      16                 for line in files.chunks():
      17                     f.write(line)
      18             return HttpResponse('上传成功!')
      19     return render(request, 'crm/upload.html')
    • 长传多个文件只需将get方法换成getlist,然后在逐一遍历返回的列表即可。

    HttpResponse对象

    • 属性:
      • content:表示返回的内容,字节类型
      • charset:表示response采用的编码的字符集,字符串类型
      • status_code:响应的HTTP响应的状态码
      • content_type:指定输出的MIME类型
    • 方法:
      • init:使用页内容实例化HttpResponse对象
      • write(content):以文件的方式写
      • flush():以文件的方式输出缓存区
      • set_cookie(key, value="", max_age=None, expire=None)  // 设置cookie
      • key、value都是字符串类型
      • max_age是一个整数,表示在数秒后过期
      • expire是一个datetime或timedelta对象,会话将在这个指定的日期/时间过期,注意datetime或timedelta值只有在使用PickleSerializer时才可序列化
      • max_age与expires二选一
      • 如果不指定过期时间,则关闭浏览器就失效
      • delete_cookie(key):删除指定的key的cookie,如果key不存在则什么也不发生。
    • 对象:
      • render
      • redirect
      • reverse
      • JsonResponse
  • 相关阅读:
    C#中如何禁止WindowsMediaPlayer双击全屏显示
    .NET中的泛型概述
    c# Windows服务管理
    C:Program不是内部或外部命令,也不是可运行的程序或批处理文件。
    Wireshark教程之二:Wireshark捕获数据分析
    Wireshark教程之一:认识Wireshark界面
    利用windows服务实现整点报时功能
    在windows服务中使用定时器
    flickity:支持触摸滑动,响应迅速的幻灯片轮播插件
    无法定位 Local Database Runtime 安装。请验证 SQL Server Express 是否正确安装以及本地数据库运行时功能是否已启用。
  • 原文地址:https://www.cnblogs.com/ivy-blogs/p/10671578.html
Copyright © 2020-2023  润新知