Django-2-server_object服务器端对象

一、request

通过request.method可以查看提交方式

  1. get

     # url为
     http://localhost:8080/user/func_get/?tel=13512121212&psw=123123
     # 路由    
     url(r'^func_get/$',views.func_get,name='func_get')
    
     # view.py
     def func_get(request):
         res1=request.GET.get('tel')
         res2=request.GET['psw']
         print(res1+'和'+res2)
         return HttpResponse('user...func_user')
    
  2. post

    1. post数据为form-data或者x-www-urlencoded

       if request.method=='POST':
           id=request.POST.get('id')
           password=request.POST['password']
            
           #当客户端数据为{‘key’:[1,3,6,7]} 时(发送数据需加:traditional:true 防止深度序列化 ),
           list=request.POST.getlist('do')
      
    2. post数据为json

       if request.method=='POST':
       
           //注意,在AJAX请求是一定要把json类型转化为字符串 JSON.stringify(data)
           data=json.loads(request.body)
           
           id=data['id']
           password=data['password']
      

二、获取Header中的信息

  1. request.META.get(“header key”) 用于获取header的信息

  2. 注意的是header key必须增加前缀HTTP,同时大写,例如你的key为username,那么应该写成:request.META.get(“HTTP_USERNAME”)

  3. 另外就是当你的header key中带有中横线,那么自动会被转成下划线,例如my-user的写成: request.META.get(“HTTP_MY_USER”)

     token=request.META.get('HTTP_TOKEN')
     print(token)
    
  1. CSRF:跨站请求伪造Cross-site request forgery:利用cookie,保存在其他网站存留的cookie,获取cookie中的token,存在localStorage中
    settings.py中可能要注释掉:# ‘django.middleware.csrf.CsrfViewMiddleware’, 为什么要这样呢,因为django默认会验证token(每次请求django都会带回来一个token,m名字叫X-CSRFtoken).如果要顺利请求则要取出cookie中的token,然后ojax.setRequestHeader(‘X-CSRFtoken’,token)。
  2. XSS:跨站脚本攻击
    嵌入脚本给用户网站
  3. format()解决sql攻击

三、Response

  1. HttpResponse(数据,状态码,cookie)

     from django.http import HttpResponse,response,JsonResponse
     #resp=response.HttpResponse('I AM LOGIN')
     return HttpResponse(json.dumps(content),
     status=200,charset='utf-8',content_type='application/json')
    
  2. JsonResponse

    class JsonResponse(data, encoder=DjangoJSONEncoder, safe=True, json_dumps_params=None, **kwargs)

    它的第一个参数 data,应该为一个 dict 实例。如果 safe 参数设置为 False,它可以是任何可 JSON 序列化的对象。

    encoder,默认为 django.core.serializers.json.DjangoJSONEncoder,用于序列化data。

    布尔参数 safe 默认为 True。如果设置为 False,可以传递任何对象进行序列化(否则,只允许 dict 实例)。如果 safe 为 True,而第一个参数传递的不是 dict 对象,将抛出一个TypeError。

    json_dumps_params 是一个字典,它是在生成响应时,传给 json.dumps() 的参数。

     from django.http import HttpResponse,response,JsonResponse
     def func_json(request):
         user=[
             {"id":"008","name":"tom"},
             {"id":"009","name":"Nancy"},
             {"id":"010","name":"John"}
         ]
         return JsonResponse(user,safe=False)
    
  3. HttpResponseRedirect

    通过 HttpResponseRedirect 和 reverse 实现重定向

     from django.http import HttpResponse,response,JsonResponse
     from django.urls import reverse
     def search(request,condition):
         return HttpResponseRedirect('/position/')
    

    通过reverse()对url的name进行解析

     return HttpResponseRedirect(reverse('index'))
    

    指定模块

     return HttpResponseRedirect(reverse('position:index'))
    

    ps:

     # 路由重定向
     def redirect_from(request,userid):
         uurl=reverse('redirect_to',args=(userid+'111',))
         return redirect(uurl)
     def redirect_to(request,id):
         return HttpResponse('跳转到这里'+id)
    

四、序列化

Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式。

  1. serializers

     def func_s(request):
         from django.core import serializers
         ret = models.UserInfo.objects.all()
         data=serializers.serialize("json",ret)
         return HttpResponse(data)
    
  2. json.dumps时无法处理datetime日期,所以可以通过自定义处理器来做扩展,如:

     import json
     from datetime import date
     from datetime import datetime
     class JsonCustomEncoder(json.JSONEncoder):
         def default(self, field):
             if isinstance(field, datetime):
                 return o.strftime('%Y-%m-%d %H:%M:%S')
             elif isinstance(field, date):
                 return o.strftime('%Y-%m-%d')
             else:
                 return json.JSONEncoder.default(self, field)
     def func_json_time(request):
         res=models.UserInfo.objects.all()
         res_d=json.dumps(res,cls=JsonCustomEncoder)
         print(res_d)
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值