所以我有一个 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 项目。
我正在尝试创建一个 flutter 应用程序,它将使用 webview 显示来自我的 Django 应用程序的经过身份验证的数据。
涉及步骤:
我想使用此令牌在 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
我偶然发现了一个奇怪的行为:我向用户对象添加了权限,但权限检查失败。
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()?
提前致谢!
罗尼
我有以下型号
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_email和breed_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 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) 我正在尝试将 2 个查询集连接在一起。现在,我正在使用|运算符,但这样做不会起到“追加”的作用。
我当前的代码是:
df = RegForm((querysetA.all() | querysetB.all()).distinct())
Run Code Online (Sandbox Code Playgroud)
我需要将 querysetA 中的元素放在 querysetB 之前。甚至有可能在只保留查询的情况下完成任务吗?
我遇到了多输出的问题。
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) 在下面的示例中,如何以及在哪里设置默认值?
author = models.ForeignKey('Author', on_delete=models.SET_DEFAULT)
我有一个异步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
我有一个模型与DateField. 在 Django 管理中,当我尝试在 Django 管理中以格式输入日期时,%d-%m-%Y它会抛出错误Enter a valid date.。由于默认模式是%Y-%m-%d
我尝试了以下方法,但在文档中找不到满意的解决方案:
DATE_INPUT_FORMATS。有没有办法以格式保存日期%d-%m-%Y。
django ×8
python ×7
asynchronous ×1
cookies ×1
foreign-keys ×1
javascript ×1
python-3.x ×1
reactjs ×1