小编bdb*_*dbd的帖子

如何在React中使用useCookies完全删除cookie而不留下未定义

所以我有一个 django-react 应用程序,其中使用 django-rest-framework 令牌身份验证包。我将从 API 调用中获取令牌并将其插入到一个钩子 (useCookies) 中,该钩子将作为 cookie 存储。我的代码如下:

import { useCookies } from "react-cookie";

const Home = () => {
     const[token, setToken, removeToken] = useCookies(['loginToken']);
}

const loginBtn = () => {
  APIService.LoginUser({
    username: username,
    password: password,
  })
    .then((response) => {
      setToken("loginToken", response.token);
    })
    .catch((error) => console.log(error));
};
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试创建一个注销功能,用户只需按注销按钮即可注销。到目前为止我所拥有的是:

const logout = () => {
     removeToken(['loginToken']);
}
Run Code Online (Sandbox Code Playgroud)

当按下按钮时,它会将我的 cookie 的值变为未定义。

loginToken: 'asd99123jsd9asd9231'
Run Code Online (Sandbox Code Playgroud)

loginToken: 'undefined'
Run Code Online (Sandbox Code Playgroud)

从我读到的文档来看,它应该完全删除cookie,甚至不留下cookie变量。我在这里可能会错过什么?预先非常感谢您。如果您需要更多信息,我非常乐意为您提供,请耐心等待,因为这是我的第一个 React 项目。

javascript cookies reactjs

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

Django 为 WebView 返回带有 TokenAuthentication 的视图

我正在尝试创建一个 flutter 应用程序,它将使用 webview 显示来自我的 Django 应用程序的经过身份验证的数据。

涉及步骤:

  1. Flutter 应用发送身份验证请求
  2. Django 验证用户凭据(用户 ID 和密码)并返回 authtoken
  3. Flutter 然后通过 webview 将请求发送到 url(需要登录)。

我想使用此令牌在 webapp 中登录用户并返回 webview。如果 url 不需要身份验证,它就像一个魅力。当 url 需要身份验证时,我被重定向到登录页面,我希望用户使用已在步骤 1 中获得的令牌身份验证绕过该页面

这是我的 Django 视图。

class QuizTake(FormView):
    permission_classes = (IsAuthenticated,)
    form_class = QuestionForm
    template_name = 'question.html'
    result_template_name = 'result.html'
    single_complete_template_name = 'single_complete.html'
    login_template_name='login.html'

      
    def dispatch(self, request, *args, **kwargs):
        self.quiz = get_object_or_404(Quiz, url=self.kwargs['quiz_name'])
        print(self.kwargs['quiz_name'])
        
        """
        Authenticate if the request has token authentication
        """

        if self.quiz.draft and not request.user.has_perm('quiz.change_quiz'):
            raise PermissionDenied

        try:
            self.logged_in_user = …
Run Code Online (Sandbox Code Playgroud)

python django django-authentication django-rest-framework django-rest-knox

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

处理django用户模型中的权限缓存

我偶然发现了一个奇怪的行为:我向用户对象添加了权限,但权限检查失败。

permission = Permission.objects.get_by_natural_key(app_label='myapp', codename='my_codename', model='mymodel')
user.user_permissions.add(permission)

user.has_permission('myapp.my_codename') # this is False!
Run Code Online (Sandbox Code Playgroud)

我在这里这里找到了一些关于用户权限缓存的帖子,解决方案似乎是从数据库完全重新加载对象。

# Request new instance of User
user = get_object_or_404(pk=user_id)

# Now note how the permissions have been updated
user.has_perms('myapp.my_codename') # now it's True
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎太过分了,而且非常不像 django。是否真的没有办法清除权限缓存或重新加载外键,就像您可以对对象执行的那样refresh_from_db()

提前致谢!
罗尼

python django django-permissions

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

Django DRF:read_only_fields 无法正常工作

我有以下型号

class Breed(models.Model)::
    name = models.CharField(max_length=200)

class Pet(models.Model):
    owner = models.ForeignKey(
        "User",
        on_delete=models.CASCADE,
    )
    name = models.CharField(max_length=200)
    breed = models.ForeignKey(
        "Breed",
        on_delete=models.CASCADE,
    )
Run Code Online (Sandbox Code Playgroud)

我正在尝试添加一些文件representation。我不希望他们被包括create在内update

class PetSerializer(serializers.ModelSerializer):
    owner_email = serializers.CharField(source='owner.email')
    breed_name = serializers.CharField(source='breed.str')
    class Meta:
        model = Pet
        fields = "__all__"
        read_only_fields = ["breed_name","owner_email"]
Run Code Online (Sandbox Code Playgroud)

这是行不通的。我在 HTMLform(DRF api 页面)中看到了owner_emailbreed_name

然而

class PetSerializer(serializers.ModelSerializer):
    owner_email = serializers.CharField(source='owner.email',read_only=True)
    breed_name = serializers.CharField(source='breed.str',read_only=True)
    class Meta:
        model = Pet
        fields = "__all__"
Run Code Online (Sandbox Code Playgroud)

这是有效的。我在 HTML 表单中没有看到它们

我还观察到,如果我直接在 read_only_fields 中使用模型字段,那么它就可以工作。

class PetSerializer(serializers.ModelSerializer): …
Run Code Online (Sandbox Code Playgroud)

django django-serializer django-rest-framework

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

Django/Django Rest 如何保存用户设备以防止每次登录时出现繁琐的 2FA?

您好,我一直在使用 Django Rest Framework 和 JWT 作为身份验证框架,我成功地基于电子邮件 OTP 进行了双因素身份验证登录,但我想要改进的一件事是我想改进登录并保存用户的设备,以便重复 2FA(双因素身份验证)可以最小化吗?

这是我为在用户电子邮件上发送 otp 所做的某些代码实例。

序列化器.py

class UserLoginSerializer(serializers.Serializer):
    email = serializers.EmailField()
    password = PasswordField()
Run Code Online (Sandbox Code Playgroud)

视图.py

class UserLoginView(generics.CreateWithMessageAPIView):
    """
    Use this end-point to get login for  user
    """
    message = _('Please check your email for 6 digit OTP code.')
    serializer_class = serializers.UserLoginSerializer

    def perform_create(self, serializer):
        usecases.UserLoginWithOTPUseCase(self.request, serializer=serializer).execute()
Run Code Online (Sandbox Code Playgroud)

用例.py

class UserLoginWithOTPUseCase(CreateUseCase, OTPMixin):
    def __init__(self, request, serializer):
        self._request = request
        super().__init__(serializer)

    def execute(self):
        self._factory()

    def _factory(self):
        credentials = {
            'username': self._data['email'],
            'password': self._data['password']
        }
        self._user …
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework

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

Django 合并 QuerySet 同时保持顺序

我正在尝试将 2 个查询集连接在一起。现在,我正在使用|运算符,但这样做不会起到“追加”的作用。

我当前的代码是:

df = RegForm((querysetA.all() | querysetB.all()).distinct())
Run Code Online (Sandbox Code Playgroud)

我需要将 querysetA 中的元素放在 querysetB 之前。甚至有可能在只保留查询的情况下完成任务吗?

python django django-models django-queryset

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

Python如何将列表打印到列表

我遇到了多输出的问题。

product_list=['Salted Egg Grade A','Salted Egg Grade B','Salted Egg Grade C']
price_list=['30','27','24']
for x in product_list:
  for y in price_list:
    print(x +": "+ y)
Run Code Online (Sandbox Code Playgroud)

我期望的是

Salted Egg Grade A: 30
Salted Egg Grade B: 27
Salted Egg Grade C: 24
Run Code Online (Sandbox Code Playgroud)

我得到的是

Salted Egg Grade A: 30
Salted Egg Grade A: 27
Salted Egg Grade A: 24
Salted Egg Grade B: 30
Salted Egg Grade B: 27
Salted Egg Grade B: 24
Salted Egg Grade C: 30
Salted Egg Grade C: …
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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

如何设置 Django 'on_delete=models.SET_DEFAULT' 的默认值

在下面的示例中,如何以及在哪里设置默认值?

author = models.ForeignKey('Author', on_delete=models.SET_DEFAULT)

python django foreign-keys django-models

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

如何在Python中的Threadpoolexecutor中运行异步函数

我有一个异步get_forecastweather函数,它为我提供 JSON 天气数据,我知道我们无法在同步中执行异步函数,但是我如何在单独的线程中执行它,需要帮助,提前致谢

def weather_detail(request):
    if request.method == 'GET':
        city_name = 'my_city'
        key = 'mykey'
        result = None
        with concurrent.futures.ThreadPoolExecutor(max_workers=3) as executor:
            response = executor.submit(get_forecastweather,city_name,key)
            result = response.result()
        print('Result from thread ',result)
        return render(request,'weather/weather_detail.html')
Run Code Online (Sandbox Code Playgroud)

我得到的错误是

 RuntimeWarning: coroutine 'get_forecastweather' was never awaited
  response = wrapped_callback(request, *callback_args, **callback_kwargs)
RuntimeWarning: Enable tracemalloc to get the object allocation traceback
Run Code Online (Sandbox Code Playgroud)

python django asynchronous threadpoolexecutor python-asyncio

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

Django Admin 的日期格式

我有一个模型与DateField. 在 Django 管理中,当我尝试在 Django 管理中以格式输入日期时,%d-%m-%Y它会抛出错误Enter a valid date.。由于默认模式是%Y-%m-%d

我尝试了以下方法,但在文档中找不到满意的解决方案:

  1. 使用 model 中的 strftime 更改格式类型。
  2. 在设置中添加DATE_INPUT_FORMATS
  3. 将语言代码更改为“en-IN”

有没有办法以格式保存日期%d-%m-%Y

django

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