学API接口测试,致富植发(五)重定向、cookie、session

本文介绍了在Django框架下进行API接口测试时如何处理重定向、Cookie和Session。通过创建接口、用户登录、设置查询学生信息需登录,探讨了重定向原理,并提供了避免重定向的方法。同时讲解了如何在代码中处理Cookie和Session,包括通过headers、cookies更新请求头以及使用session类。
摘要由CSDN通过智能技术生成

目录

继续啃django框架

1、定义接口

2、映射路径

3、创建模板

4、注释掉墙

5、数据库绝对路径改成相对路径

6、创建表----->makemigrations----->migrate

7、创建用户(邮箱符合规范即可)----->createsuperuser

8、启动服务器

10、设置查询学生信息必须先登录(重定向的设置

11、这是为啥呢,抓包分析一下重定向的原理

12、那能不能丑拒重定向呢,阔以

13、成功,撒花。无需跳转到登录接口了

14、接下来用代码访问一下登录接口(温馨提示,提交表单用post),看看响应头

15、那session是怎么肥事

16、因此代码需要模仿浏览器,把响应头的cookie取出来,然后保存到请求头

方法一:把响应头的cookie取出来后,通过headers更新请求头

方法二:把响应头的cookie取出来后,通过cookies设置请求携带的cookie

方法三:实例化session类,调用get()、post()等类方法自动添加cookie


 

cookie和session

 

Cookie和session的区别:

1.cookie数据存在客户浏览器上,session数据存放在服务器上。
2.Cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗(使用用户的cookies获取相关信息)。
3.Session会存放在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能。
4.单个cookie保存的数据不能超过4k, 很多浏览器都限制一个站点最多保存20个cookie。
 

Cookie和session的利弊:

带上cookie、session的好处:很多网站必须登录之后(或者获取某种权限之后)才能够请求到相关数据。
带上cookie、session的弊端:一套cookie、session往往和一个用户对应。请求太快,请求次数太多,容易被服务器识别为爬虫。从而是账号受到损害

使用建议:
1.不需要cookie的时候尽量不需要使用cookie。
2.为获取登录之后的页面,我们必须发送带有cookie的请求,此时为了确保账号安全应该尽量降低数据采集速度。

 

继续啃django框架

1、定义接口

from django.shortcuts import render
from django.http.response import *
from django.contrib import auth
from django.contrib.auth.decorators import login_required
import json
# Create your views here.

students = [
    {'name': 'tom', 'age': 22, 'sex': '男', 'classid': 'T1029'},
    {'name': 'mary', 'age': 22, 'sex': '女', 'classid': 'T1028'},
    {'name': 'robot', 'age': 25, 'sex': '男', 'classid': 'T1027'},
]


# 测试账号
# admin
# admin123


def login(request):
    """
    登录系统
    :param request:
    :return:
    """
    if request.method == 'GET':
        # 请求登录页面
        return render(request, 'login.html')
    elif request.method == 'POST':
        # 提交表单
        username = request.POST.get('username')
        password = request.POST.get('password')
        if (not username) or (not password):
            return JsonResponse({'result': 1, 'msg': '用户名或密码为空'})
        user = auth.authenticate(username=username, password=password)
        if user is not None:
            auth.login(request, user)
            return JsonResponse({'result': 0, 'msg': 'login success'})
        return JsonResponse({'result': 2, 'msg': '用户名或密码错误'})
    else:
        return HttpResponseNotAllowed(['GET', 'POST'])


# 退出登录
def logout(request):
    auth.logout(request=request)
    return HttpResponseRedirect('/login')


@login_required(login_url='/login')
def html_response_api(request):
    print('request.path:', request.path)
    print('request.path:', request.path_info)
    print('request.path:', request.headers)
    print('request.path:', request.body)
    name = request.GET.get('name')
    data = {'name': name}
    return render(request, 'mypage.html', data)


@login_required(login_url='/login')
def add_student_json(request):
    """
    添加学生信息
    :param request:
    :return:
    """
    data = request.body.decode(encoding='utf8')
    print(data)
    try:
        json.loads(data)

    except:
        print('parse json error')
        return JsonResponse({'result': 1, 'msg': 'data format error: not json'})
    return JsonResponse({'result': 0, 'msg': 'success'})


@login_required(login_url='/login')
def add_student(request):
    """
    添加学生信息
    :param request:
    :return:
    """
    if request.method != 'POST':
        return HttpResponseNotAllowed(['POST'])
    name = request.POST.get('name')
    age = request.POST.get('age')
    sex = request.POST.get('sex')
    classid = request.POST.get('classid')
    print('age type is', type(age))
    print('age is', age)
    student = {}
    if not name:
        return JsonResponse({'result': 1, 'msg': 'name missing'})
    if age is not None and not( age.isdigit() and age[0] != '0'):
        return JsonResponse({'result': 2, 'msg': 'age invalid'})
    if sex is not None and sex not in ('男', '女'):
        return JsonResponse({'result': 3, 'msg': 'sex invalid'})
    student.update(name=name, age=int(age) if age is not None else 0,
                   sex=sex if sex is not None else '男',
                   classid=classid if classid is not None else 'T0000')
    return JsonResponse({'result': 0, 'msg': 'success'})


@login_required(login_url='/login')
def query_student(request):
    """
    查询学生信息
    :param request:
    :return:
    """

    # 判断请求方法
    if request.method != 'GET':
        return HttpResponseNotAllowed(['GET'])

    name = request.GET.get('name')
    data = []
    if name:
        for student in students:
            if name == student['name']:
                data.append(student)
        if data:
            return JsonResponse({'result':0, 'msg': 'success', 'data': data})
        else:
            return JsonResponse({'result': 1, 'msg': 'fail', 'data': None})
    else:
        return JsonResponse({'result': 2, 'msg': 'parameter missing', 'data': None})

 

2、映射路径

urlpatterns = [
    path('gethtml', html_response_api),
    path('logout', logout),
    path('login', login),
    path('api/student/add', add_student_json),
    path('student/add', add_student),
    path('student/query', query_student),
    path('hi', hello), 
    path('admin/', admin.site.urls),
]

 

3、创建模板

login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值