AssertionError: 302 != 200 : 无法检索重定向页面 '/api/v2/app/nextdialog': 响应代码为 302 (预期为 200)

2023-11-29

AssertionError: 302 != 200 : 无法检索重定向页面 '/api/v2/app/nextdialog': 响应代码为 302 (预期为 200)

在 Django 中,可以有三个视图,每个视图都重定向到下一个视图。视图 1 重定向到视图 2,视图 2 重定向到视图 3?

视图.py:

class ConversationLayerView(generics.GenericAPIView):
    permission_classes = (permissions.IsAuthenticated,)

    def post(self, request, *args, **kwargs):
        body = request.data
        cardType = body["cardType"]
        if cardType == "CHOICE":
            serializer = appChoiceTypeSerializer(body)
        elif cardType == "TEXT":
            serializer = appTextTypeSerializer(body)
        elif cardType == "INPUT":
            serializer = appInputTypeSerializer(body)
        else:
            serializer = StartAssessmentSerializer(body)
        validated_body = serializer.validate_value(body)
        url = get_endpoint(validated_body)
        reverse_url = encodeurl(body, url)
        return HttpResponseRedirect(reverse_url)
        

class NextDialog(generics.GenericAPIView):
    permission_classes = (permissions.AllowAny,)

    def get(self, request, *args, **kwargs):
        result = request.GET
        data = result.dict()
        contact_uuid = data["contact_uuid"]
        step = data["step"]
        value = data["value"]
        description = data["description"]
        title = data["title"]

        if data["cardType"] == "CHOICE":
            optionId = int(value) - 1
        else:
            optionId = data["optionId"]
        path = get_path(data)
        assessment_id = path.split("/")[-3]
        request = build_rp_request(data)
        app_response = post_to_app(request, path)
        if data["cardType"] != "TEXT":
            if data["cardType"] == "INPUT":
                optionId = None
            store_url_entry = appAssessments(
                contact_id=contact_uuid,
                assessment_id=assessment_id,
                title=title,
                description=description,
                step=step,
                user_input=value,
                optionId=optionId,
            )
            store_url_entry.save()
        pdf = pdf_ready(app_response)
        if pdf:
            response = pdf_endpoint(app_response)
            return HttpResponseRedirect(response)
        else:
            message = format_message(app_response)
            return Response(message, status=status.HTTP_200_OK)
            
            
class Reports(generics.GenericAPIView):
    permission_classes = (permissions.AllowAny,)

    def get(self, request, *args, **kwargs):
        report_id = request.GET.get("report_id")
        response = get_report(report_id)
        return Response(response, status=status.HTTP_200_OK)                    
        
    

Utils.py

def get_endpoint(payload):
   value = payload["value"]
   if value != "":
       if value == "back":
           url = reverse("app-previous-dialog")
       elif value == "abort":
           url = reverse("app-abort")
       else:
           url = reverse("app-next-dialog")
   elif value == "":
       url = reverse("app-start-assessment")
   return url

def encodeurl(payload, url):
   qs = "?" + urlencode(payload, safe="")
   reverse_url = url + qs
   return reverse_url

代码解释: 应用程序在 ConversationLayerView 中接收 json 负载。它调用端点方法来根据有效负载中设置的“value”键来了解要重定向到哪个端点。

该请求看起来像这样:

{
    "contact_uuid": "67460e74-02e3-11e8-b443-00163e990bdb",
    "choices": null,
    "value": "Charles",
    "cardType": "INPUT",
    "step": null,
    "optionId": null,
    "path": "",
    "title": "",
    "description": "What's your name",
    "message": ""
}

由于“value”是“Charles”,因此视图重定向到 NextDialog 视图中的“app-next-dialog”。 在此视图中,向外部应用程序发出 POST 请求并收到 json 响应。如果响应具有 PDF 密钥,则此视图将重定向到第三个视图。 这发生在这里:

if pdf:
    response = pdf_endpoint(app_response)
    return HttpResponseRedirect(response)
else:
    message = format_message(app_response)
    return Response(message, status=status.HTTP_200_OK)

如果密钥存在,则重定向到“response”,其输出为“/api/v2/app/reports?report_id=/reports/17340f51604cb35bd2c6b7b9b16f3aec”,否则不重定向但返回 200。

Error:

AssertionError: 302 != 200 : Couldn't retrieve redirection page '/api/v2/app/nextdialog': response code was 302 (expected 200)

Url.py

path(
    "api/v2/app/assessments",
    views.PresentationLayerView.as_view(),
    name="app-assessments",
),
path("api/v2/app/nextdialog", views.NextDialog.as_view(), name="app-next-dialog"),
path("api/v2/app/reports", views.Reports.as_view(), name="app-reports"),

测试视图.py:

class appAssessmentReport(APITestCase):
    data = {
        "contact_uuid": "67460e74-02e3-11e8-b443-00163e990bdd",
        "choices": None,
        "message": (
            "How old are you?\n\nReply *back* to go to "
            "the previous question or *abort* to "
            "end the assessment"
        ),
        "explanations": "",
        "step": 39,
        "value": "27",
        "optionId": None,
        "path": "/assessments/f9d4be32-78fa-48e0-b9a3-e12e305e73ce/dialog/next",
        "cardType": "INPUT",
        "title": "Patient Information",
        "description": "How old are you?",
    }

    start_url = reverse("app-assessments")
    next_dialog_url = reverse("app-next-dialog")
    pdf_url = reverse("app-reports")
    
    destination_url = (
        "/api/v2/app/nextdialog?contact_uuid="
        "67460e74-02e3-11e8-b443-00163e990bdd&"
        "choices=None&message=How+old+are+you%3F"
        "%0A%0AReply+%2Aback%2A+to+go+to+the+"
        "previous+question+or+%2Aabort%2A+to+end"
        "+the+assessment&explanations=&step="
        "39&value=27&optionId=None&path=%2F"
        "assessments%2Ff9d4be32-78fa-48e0-b9a3"
        "-e12e305e73ce%2Fdialog%2Fnext&cardType"
        "=INPUT&title=Patient+Information&"
        "description=How+old+are+you%3F"
    )
    
    @patch("app.views.pdf_ready")
    @patch("app.views.post_to_app")
    def test_assessment_report(self, mock_post_to_app, mock_pdf_ready):
        mock_post_to_app.return_value = {
            "cardType": "CHOICE",
            "step": 40,
            "title": {"en-US": "YOUR REPORT"},
            "description": {"en-US": ""},
            "options": [
                {"optionId": 0, "text": {"en-US": "Option 1"}},
                {"optionId": 1, "text": {"en-US": "Option 2"}},
                {"optionId": 2, "text": {"en-US": "Option 3"}},
            ],
            "_links": {
                "self": {
                    "method": "GET",
                    "href": "/assessments/898d915e-229f-48f2-9b98-cfd760ba8965",
                },
                "report": {
                    "method": "GET",
                    "href": "/reports/17340f51604cb35bd2c6b7b9b16f3aec",
                },
            },
        }
        mock_pdf_ready.return_value = utils.pdf_ready(mock_post_to_app.return_value)
        user = get_user_model().objects.create_user("test")
        self.client.force_authenticate(user)
        response = self.client.post(self.start_url, self.data, format="json")
        print(response)
        self.assertRedirects(response, self.destination_url)

到目前为止这还行不通。总之,我只是尝试从视图 1 开始,重定向到视图 2,然后从视图 2 重定向到视图 3。 这在 Django 中可能吗? 谢谢。


问题在于您的测试,而不是视图逻辑 - 完全有可能存在一系列重定向。

assertRedirects检查响应的状态,默认情况下要求它是 HTTP 200 响应。由于您有一系列重定向,因此响应为 302(另一个重定向)而不是 200,这就是测试失败并显示错误“响应代码为 302(预期为 200)”的原因。

您需要修改target_status_code诉说的论据assertRedirects您期望响应包含 302 状态代码:

self.assertRedirects(response, self.destination_url, target_status_code=302)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AssertionError: 302 != 200 : 无法检索重定向页面 '/api/v2/app/nextdialog': 响应代码为 302 (预期为 200) 的相关文章

  • 我应该为 MySQL 使用什么 python 3 库? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 据我所知 MySQLdb 仍然没有移植到 Python 3 pypy 上似乎有另一个名为 PyMySQL
  • 在 Python 中绘制分类数据的三个维度

    我的数据包含三个我试图可视化的分类变量 城市 五个之一 职业 四种之一 血型 四种之一 到目前为止 我已经成功地以一种我认为易于使用的方式对数据进行了分组 import numpy as np pandas as pd Make data
  • 使用 Pymongo 从 Windows 连接到 AWS 实例上的 MongoDB

    此行反复抛出错误 client MongoClient ec2 12 345 67 89 us east 2 compute amazonaws com 27017 ssl True ssl keyfile C mongo pem 由于显而
  • PyTorch:加速数据加载

    我正在使用 dendnet121 从 Kaggle 数据集进行猫 狗检测 我启用了cuda 看起来训练速度非常快 然而 数据加载 或者可能是处理 似乎非常慢 有一些方法可以加快速度吗 我尝试玩女巫批量大小 但没有提供太多帮助 我还将 num
  • 在 vim 折叠线中语法高亮 Python

    我发现代码折叠 http en wikipedia org wiki Code folding帮助我更好地组织我的文件 因此 在我的底部 vimrc 我启用vim代码折叠 http vimdoc sourceforge net htmldo
  • Django ORM:使用具有“and”功能的对象列表进行过滤

    新手问题 Models Item model Models attributes models ManyToManyField Attributes null True Attributes models Models title mode
  • 是否有更矢量化的方法来沿轴执行 numpy.outer ?

    gt gt gt x np array a0 a1 b0 b1 gt gt gt y np array x0 x1 y0 y1 gt gt gt iterable np outer x i y i for i in xrange x sha
  • 使用 3d 对象作为 3d 散点图中的标记 - Python

    使用下面的代码 我尝试模拟一个用罐头制成的碗 我希望每个标记都是一个罐头 最好的方法是什么 我真的很感激任何建议 谢谢 import pylab import numpy as np from math import pi sin cos
  • 如何为 Python 中的应用程序设置专用屏幕区域?

    MS OneNote 就是一个很好的例子 它可以选择固定在屏幕的一侧 并将所有其他窗口推到一侧 当最大化或调整其他窗口大小时 它们只能扩展到 OneNote 的边缘 Python 使用 Tkinter 或其他模块是否具有此功能 感谢您的帮助
  • PyCharm 无法识别字典值类型

    我有一个简单的代码片段 其中我将字典值设置为空列表 new dict for i in range 1 13 new dict i 现在 如果在下一行的循环内我会输入new dict i 并添加一个点 我希望 PyCharm 向我显示可用于
  • 如何绘制多类分类器的精度和召回率?

    我正在使用 scikit learn 我想绘制精度和召回曲线 我正在使用的分类器是RandomForestClassifier scikit learn 文档中的所有资源都使用二元分类 另外 我可以绘制多类的 ROC 曲线吗 另外 我只找到
  • 当 debug=false 时,Django 媒体文件不起作用

    settings py STATIC URL static STATICFILES STORAGE django contrib staticfiles storage StaticFilesStorage STATICFILES DIRS
  • PyCharm - 如何挂起所有线程

    我们使用 PyCharm 5 0 1 进行多线程调试 当它在断点处停止时 只有特定线程停止 而所有其他线程继续 这使得 冻结时刻 和检查参数值以及其他线程的当前状态变得困难 当其中一个线程在断点处停止时 是否可以挂起所有线程 这在最新的 P
  • 如何测试列表中多个值的成员资格

    我想测试两个或多个值是否在列表中具有成员资格 但我得到了意外的结果 gt gt gt a b in b a foo bar a True 那么 Python 可以同时测试列表中多个值的成员资格吗 这个结果意味着什么 See also How
  • psycopg 错误,列不存在

    我不断收到这个 错误 psycopg2 ProgrammingError 列 someentry 不存在 该错误表明该列someentry不存在时someentry不是列 它只是要输入数据库的值 这是给出错误的代码 cur execute
  • 在python中安装scipy模块时出错

    我正在尝试使用 pip 在 python 中安装 scipy 模块 它显示以下错误 Command c users sony appdata local programs python python35 32 python exe u c
  • Python Camelot无边框表格提取问题

    我正在努力从 pdf 文件中提取一些无边框表格 如下图所示 我已经安装了 python camelot 如图所示here https github com socialcopsdev camelot并且仅适用于有边框的表格 请参阅以下详细信
  • Python:帮助(numpy)在退出时导致段错误

    我遇到了一个奇怪的现象 在 python 解释器中 我执行以下操作 gt gt gt import numpy gt gt gt help numpy 帮助显示正确 但一旦我按 q 返回解释器 Segmentation fault core
  • Scrapy的redirect_urls异常.KeyError

    我是 Scrapy 和 Python 的新手 最近推出了我的第一个蜘蛛 有一个功能似乎以前有效 但现在它只适用于我试图废弃的一些网站 代码行是 item url direct response request meta redirect u
  • 部署 Flask 应用程序时如何检测额外文件的更改并重新加载应用程序? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 我在 Flask 中构建了一个小型 Web 应用程序 并尝试将其部署在 Pythonanywhere 上 在开发过程中

随机推荐

  • 如何根据 swing 中的 JPanel(table) 行数增加 JFrame 大小

    我有 Swing 应用程序 它执行以下操作 public void init jFrame new JFrame jFrame add sortingDataInputComponent asComponent jFrame setDefa
  • 如何在 ttk.OptionMenu 周围制作边框

    在尝试制作入口框架时 我遇到了一个问题 我无法在 ttk OptionMenu 周围制作边框以使其看起来与 ttk Entry 相似 图中是相邻的两个 制作选项菜单 option ttk OptionMenu bottom containe
  • DatabaseMetaData.getColumns 返回同义词的空结果集

    方法getColumns 元数据上的同义词返回空结果集 对于表和视图 它正确返回列列表 这种情况发生在 Oracle 11g Express 并使用最新的 Oracle JDBC 驱动程序 11 2 3 上 其他 SQL 服务器也会发生这种
  • 我们如何在 SwiftUI 中访问 List 的 DisclosureGroup?

    我使用此代码在 SwiftUI 2 0 和 macOs 10 15 7 的列表中显示我的父母和孩子数据 默认情况下 我的父母处于折叠状态 我喜欢强制其中一些通过我的按钮操作进行扩展 我有那个按钮 有谁知道如何解决这个问题 这是我的代码 im
  • 设置 DAY_OF_WEEK 返回意外结果

    我想将给定日历实例的时间戳设置为一周的开始 星期一 相反 它返回一个看似完全不相关的时间戳 除非我在这样做之前访问日历的任何字段 我在下面提供了一个示例 另请参阅此可运行示例Ideone 这是预期的行为吗 这背后的逻辑是什么 是的 我听说过
  • !important 已覆盖

    我正在使用 JQuery mobile 我希望我的应用程序上的所有文本都是紫色的 我这样做了 color 7A68AE important in my body我的 CSS 部分 然后我尝试在 firebug 中调试它并注意到我的 impo
  • PHP DomDocument 更改条件注释

    我有这个带有条件注释的 html 文件
  • 在搜索结果中显示整行

    在 Visual Studio Code vscode 中 当我搜索某些内容时 每个搜索结果中的行开头可能会被切断 怎样才能看到被剪掉的部分呢 例如 假设我搜索 directory 搜索结果可能会显示以下内容 require directo
  • 如何期待 Robotium 中的异常?

    这是我的测试用例 public void testStartActivityWithoutExtraData try getActivity Assert fail Should have thrown IllegalStateExcept
  • perl删除连续的重复行

    我想删除连续的重复行 即例如 test txt car speed is good bike slower than car plane super fast super fast bullet train super fast 这将删除除
  • Firebase 数据库结构

    我目前正在为 iOS 创建一个电子商务应用程序 但我无法决定如何为用户通过 关键字 搜索项目的场景构建数据库 我不确定存储关键字数组或仅存储该项目的关键字字符串是否会更好 如果大家有什么建议请告诉我 谢谢 这是我现在的单个项目的结构 ite
  • Ajax.BeginForm 导致重定向到部分视图而不是就地视图

    我的 Search cshtml 有一个名为 search results 的 div 需要更新 SearchResults 是操作名称 我已经在 MVC2 VS2008 项目上做过很多次了 但这是我第一次使用 MVC3 和 VS2010
  • AI Platform 中的 PyTorch 模型部署

    我正在 Google Cloud AI Platform 中部署 Pytorch 模型 出现以下错误 ERROR gcloud beta ai platform versions create Create Version failed B
  • 将对象绑定到 WPF TreeView

    我想知道如何将自定义数据类型绑定到TreeView 数据类型基本上是包含其他数组列表的对象数组列表 访问看起来像这样 foreach DeviceGroup dg in system deviceGroups foreach DeviceT
  • 为什么这段多行代码中存在VBA语法错误?

    我有一行这么长的代码 VBE 说它有语法错误 我检查了代码 我很确定它应该没问题 我是否超出了限制 Worksheets DTR Cells Total Rows Formulas 1 26 IF INDEX Payroll Tables
  • Oracle 数据库 11g 中出现错误 ORA-12638

    我是一个使用 Oracle Database 11g Express 的大初学者 今天第一次尝试 我只掌握了数据库的理论知识 学过SQL但从未使用过 所以 我今天安装了Oracle 11g 在需要时给了他们系统密码 然后我继续启动 启动数据
  • 如何为 Python 中的 document_client 对象发送的 Cosmos DB 查询设置连续令牌?

    我有一个 API 可以根据文档字段中出现的关键字检索文档 我想对结果进行分页 以便我可以将文档返回给发送请求的客户 并允许他们在需要时请求更多文档 当我在 Azure 数据资源管理器中时 查询本身在浏览器中只需要一秒钟左右的时间 但当我使用
  • 如何取消Facebook登录?

    我刚刚添加了一个facebook我的手机游戏应用程序的功能并根据教程实现了 SSO 单点登录 https developers facebook com docs mobile ios build 如果用户尚未安装 facebook 的应用
  • Next.js - 设置 onClick 处理程序时遇到问题

    访问时我很惊讶react dev这么说create react app不再建议用于 React 应用程序引导 好吧 世界发生了变化 让我们深入了解我的第一个应用程序的 Next js import Image from next image
  • AssertionError: 302 != 200 : 无法检索重定向页面 '/api/v2/app/nextdialog': 响应代码为 302 (预期为 200)

    AssertionError 302 200 无法检索重定向页面 api v2 app nextdialog 响应代码为 302 预期为 200 在 Django 中 可以有三个视图 每个视图都重定向到下一个视图 视图 1 重定向到视图 2