小编Aas*_*lli的帖子

如何在后端 API 中验证 AzureAD accessToken

我只是想知道如何在我的例子中验证后端 API 中的 azure 广告访问令牌,即 Django Rest 框架。

考虑一下我有一个单页应用程序或一个本机应用程序和一个完全独立的后端 API(django Rest 框架)。就我而言,如果我的单页应用程序/本机应用程序想要从后端 API 访问某些数据,并且为了访问 API,用户应该登录后端 API。

所以我的方法是利用 MSAL 库从 SPA/本机应用程序获取访问令牌,然后获取令牌后,将该令牌传递到后端 API,对其进行验证,从图形 api 获取用户信息。如果数据库中存在用户,则登录该用户并传递所需的信息。如果用户信息不存在,则创建用户、登录并从 API 传递信息。

所以我的问题是,当我将访问令牌传递到后端 api 时,如何验证用户/SPA/本机应用程序传递到后端 API 的令牌是否有效?

我们是否只需要使用 user/SPA/native 传递的 accessToken 对图形 API 端点进行 API 调用,如果能够使用 accessToken 获取用户数据,则令牌有效,或者如果失败,则 accessToken 无效。

这是验证令牌的一般方法还是有更好的方法?请帮忙

django django-rest-framework reactjs azure-active-directory azure-ad-msal

10
推荐指数
1
解决办法
4397
查看次数

如何在 django rest 框架中访问获取请求数据

如何在 django rest 框架中访问 GET 请求数据。在文档中,他们提到“为了清楚起见,我们建议使用 request.query_params 而不是 Django 的标准 request.GET”

https://www.django-rest-framework.org/api-guide/requests/

但是当我使用 request.query_params.get('some_vaue') 时,即使我在请求正文中传递数据,它也不会给我任何信息。

示例代码示例:

class TestView(APIView):
    def get(self, request):
        test = request.query_params.get('test')
        print('data',test)
        ...
        ...
        ...
Run Code Online (Sandbox Code Playgroud)

当我在邮递员的请求正文中传递一些值并打印该值时,它实际上打印了 None。

更新

下面是我的 axios 代码

 axios.get(API_URL, {
            headers: {
                'Content-Type': 'application/json'
            },
            params: {
                page_num: 1, 
                test: 'test data'
            }
        })
        .then(res => {
            console.log(res);
        })
        .catch(err => {
            console.log(err.response.data);
        });
Run Code Online (Sandbox Code Playgroud)

重新更新:

出于测试目的,我打印了请求对象,如

print(request.__dict__)
Run Code Online (Sandbox Code Playgroud)

所以它打印出来

{'_request': <WSGIRequest: GET '/api/my api url/?page_num=1&test=test+data'>, 'parsers': [<rest_framework.parsers.JSONParser object at 0x0000016742098128>, <rest_framework.parsers.FormParser object at 0x00000167420980B8>, <rest_framework.parsers.MultiPartParser …
Run Code Online (Sandbox Code Playgroud)

django request django-rest-framework axios

6
推荐指数
1
解决办法
1万
查看次数

id 不存在于 validate() 和 ListSerializer 的 update() Django Rest Framework 中

我正在学习 Django Rest Framework 的新手,并且在序列化程序验证和 ListSerializer 更新方法方面遇到问题。

我有一个处理放置请求的 APIView 类。我只是想进行自定义验证,因此我在序列化程序类中覆盖了验证方法。

我从邮递员那里向这个 APIView 类发送了一个 JSON 数据。

样本 JASON 数据:

[
{
            "id": 1,
            "ip": "10.1.1.1",
            "host_name": "hostname 1"
},
{
            "id": 2,
            "ip": "10.1.1.2",
            "host_name": "hostname 2"
}
]

Run Code Online (Sandbox Code Playgroud)

当我收到数据并执行 serializer.is_valid() 时,它将流传递给覆盖的验证函数。但是在那里,当我检查 attrs 参数时,我得到了除 id 之外的所有字段。id 的键和值不存在。它显示无。

当我尝试覆盖 ListSerializer 中的更新方法时,我也遇到了同样的问题。

当我在 ListSerializer 的更新方法中尝试以下代码时,

data_mapping = {item['id']: item for item in validated_data}
Run Code Online (Sandbox Code Playgroud)

我收到一条错误消息,提示 KeyError 'id'。

似乎它不接受 id 字段,我不知道为什么!如果我在任何地方错了,请有人向我解释这一点。

序列化器类

from rest_framework import serializers
from .models import NoAccessDetails


class NoAccessDetailsListSerializer(serializers.ListSerializer):
    def update(self, instance, …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

5
推荐指数
1
解决办法
1300
查看次数

获取验证错误字段不能为 null,即使模型中 null=True

我的模型中有一个外键,该字段可以为空。

status = models.ForeignKey(Status, on_delete=models.SET_NULL, null=True, blank=True, related_name="status")
Run Code Online (Sandbox Code Playgroud)

当我发送此字段为空的请求时,我收到验证错误说

[
    {
        "status": [
            "This field may not be null."
        ]
    }
]
Run Code Online (Sandbox Code Playgroud)

即使我设置了 null=True 我不确定为什么它会抛出验证错误?谁能帮我解决这个问题吗?

更新1:

这是我正在使用的以下示例序列化器

class SampleSerializer(serializers.ModelSerializer):
    id = serializers.IntegerField(read_only=False)
    status = serializers.CharField()

    class Meta:
        model = model_name
        list_serializer_class = SampleListSerializerClass
        fields = ("status", ...few other model fields)
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework

5
推荐指数
0
解决办法
3288
查看次数

获取 flake8 返回非零代码:docker 中的 1

我一直在关注这篇文章。 https://testdriven.io/blog/dockerizing-django-with-postgres-gunicorn-and-nginx/#production-dockerfile

在 Production Dockerfile 部分,Dockerfile.prod 文件包含这些行。

# lint
RUN pip install --upgrade pip
RUN pip install flake8
COPY . /usr/src/app/
RUN flake8 --ignore=E501,F401 .
Run Code Online (Sandbox Code Playgroud)

当我运行以下命令时,

docker-compose -f docker-compose.prod.yml up -d --build
Run Code Online (Sandbox Code Playgroud)

我收到以下错误。

ERROR: Service 'web' failed to build: The command '/bin/sh -c flake8 --ignore=E501,F401' returned a non-zero code: 1
Run Code Online (Sandbox Code Playgroud)

我不太了解 flake8,当我评论 'RUN flake8 --ignore=E501,F401 时。Dockerfile.prod 文件中的行一切正常。

任何人都可以告诉我为什么我面临这个问题并告诉我修复而不是从 Dockerfile 中删除该行。我对 flak8 不太了解,而且我对 Docker 也很陌生,非常感谢您的帮助:)

谢谢。

python django docker flake8 docker-compose

5
推荐指数
2
解决办法
1805
查看次数

在 Antd Table React 中单独处理分页排序和过滤

我想在我的 antd 表中分别处理服务器端排序、过滤和分页。因此,无论何时更改分页,都不应该调用排序和过滤功能。同样用于排序和过滤。在 Table 的 antd 文档中,他们使用了 onChange 属性,每当排序、过滤或分页更改时都会调用该属性。https://ant.design/components/table/#components-table-demo-ajax

为了单独处理分页,我使用了 Pagination 的 onChange 道具。但是在这里,当分页更改时,它会调用排序和过滤功能,并且当排序和过滤更改时,它会调用分页功能。

我不确定如何实现此功能。任何人都可以帮我解决这个问题。

表的示例 antd 代码

const handlePagination = page => {
    //This should be called only when pagination changes
    dispatch(PaginateData(page));
};

const handleSortFilter= params=> {
    //This should be called only when pagination or sorting is called.
    dispatch(SortFilterData(params));
};

<Table
    rowSelection={rowSelection}
    onChange={handleSortFilter}
    rowKey={record => record.id}
    columns={columns}
    dataSource={data}
    loading={tableActionInProgress}
    pagination={{
        onChange: handlePagination,
        pageSize: dataPerPage,
        total: CountData
    }}
/>
Run Code Online (Sandbox Code Playgroud)

更新 在 ajax 请求的 antd 表文档(https://ant.design/components/table/#components-table-demo-ajax)中,我可以看到每当我们更改排序或过滤器时,它都会将页面更改回 1。是否需要在代码中更改任何内容,以便每当更改过滤器或排序时都不应将页面参数设置为 1。 …

reactjs antd react-hooks

4
推荐指数
1
解决办法
1万
查看次数

React Django REST 框架会话不持久/工作

我正在开发一个以 Django Rest Framework 作为后端,React 作为前端的项目。当我最初在某个函数/视图中设置会话变量时,稍后当我尝试通过 axios 调用访问不同的视图时,如果我尝试访问之前创建的会话变量,则会在该视图中出现 KeyError。会话似乎没有存储。

我用谷歌搜索我遇到了我面临的类似问题。

Django休息框架Reactjs会话不起作用

我通过在 axios 调用中添加{ withCredentials: true }来遵循这个过程。现在我得到不同的错误。现在问题是无法访问后端。我收到一条错误消息,说Access to XMLHttpRequest at ' http://127.0.0.1:8000/url/ ' from origin ' http://localhost:3000 ' has been Blocked by CORS policy

我再次搜索了我遇到的问题,发现我必须在 django settings.py 中添加 CORS_ORIGIN_WHITELIST

我跟着下面的帖子

Django Python rest 框架,Chrome 中请求的资源上不存在“Access-Control-Allow-Origin”标头,可在 firefox 中使用

我已经像这样添加了 CORS_ORIGIN_WHITELIST

CORS_ORIGIN_WHITELIST = [' http://localhost:3000 ',' http: //127.0.0.1 :3000 ']

我仍然面临同样的问题。我不知道出了什么问题。任何人都可以帮助我解决这个问题。

谢谢你。

django django-rest-framework reactjs axios

3
推荐指数
1
解决办法
1097
查看次数

根据antd表中的数据默认选择表行

我是 antd 的新手,我的项目被困在一个地方。我想根据源数据或数据默认检查/选择行的复选框。

例如,如果我的数据源为

const data =
[ 
{
key: "1",
name: "John",
age: 22,
chosen: true,
working: null
},
{
key : "2",
name: "Jason",
age: 23,
chosen: false,
working: 'John'
}]
Run Code Online (Sandbox Code Playgroud)

因此,根据数据源,如果任何对象选择 key 为 true,我想默认检查/选择这些行的复选框。

我可以根据所选键的值是否为真来过滤掉数据数组。但是如何默认选中该复选框呢?antd 表是否有任何道具,它将获取过滤数据的数组并检查/选择这些行的复选框?

我尝试使用 getCheckboxProps 中的 checked 属性检查行,但是当我在控制台中使用该属性时,我收到一条警告:“警告:[antd:Table] 不要设置checkeddefaultCheckedin getCheckboxProps。请改用selectedRowKeys。”

下面是我当前正在使用的代码。

const data =
[ 
 {
  key: "1",
  name : "John",
  age : 22,
  chosen: true,
  working: null
 },
 {
  key : "2",
  name: "Jason",
  age: 23, …
Run Code Online (Sandbox Code Playgroud)

reactjs antd

1
推荐指数
1
解决办法
2万
查看次数

使用 React 和 Redux 设置 Antd 的 Menu defaultSelectedKeys 值

我正在使用 antd 构建 React 应用程序。我正在使用antd的Layout来设计布局。另外,我使用 React-router 进行路由,使用 redux 进行状态管理。

\n\n

在 antd 的菜单中,我将 defaultSelectedKeys 设置为空白数组,以便在页面加载时我不想显示活动菜单项。相反,当用户在浏览器中使用应用程序 URL 访问某个页面(组件)时,该页面的菜单项应该处于活动状态。

\n\n

例如,默认情况下,defaultSelectedKeys数组将为空。因此,最初没有菜单项会处于活动状态。当应用程序加载并且反应路由器路由到主组件时,主菜单项应该处于活动状态。

\n\n

为此,我使用 useEffect 挂钩在安装特定组件时通过菜单键调度操作。

\n\n

示例家庭组件:

\n\n
import React, { Fragment, useEffect } from "react";\nimport { useDispatch } from "react-redux";\nimport { CURRENT_COMPONENT } from "./../reducers/types";\nexport default function HomeComponent() {\n  const dispatch = useDispatch();\n  useEffect(() => {\n    dispatch({\n      type: CURRENT_COMPONENT,\n      payload: { component: "Landing", sideBarMenuKey: "1" }\n    });\n  }, [dispatch]);\n  return (\n    <Fragment>\n      <h1>This is a home componet </h1>\n      <br …
Run Code Online (Sandbox Code Playgroud)

reactjs react-redux antd react-hooks

1
推荐指数
1
解决办法
9591
查看次数