小编Rik*_*eek的帖子

如何正确使用Formik的setError方法?(反应库)

我正在使用React与后端通信。现在尝试正确实现Formik(表单库)。

主要问题: 如何正确使用Formik的setError方法?

客户端验证错误可以正确显示,但是现在我尝试设置/显示后端验证错误,这些错误将通过状态码400的响应返回。

链接到我尝试使用的方法的文档

我在下面的代码中名为handle400Error的方法中使用此方法。

我的React(和Formik)代码:

import React, { Component } from "react";
import axios from "axios";
import { Formik } from "formik";
import * as Yup from "yup";
import styled from "styled-components";
import FormError from "../formError";

const Label = styled.label``;

class LoginForm extends Component {
  initialValues = {
    password: "",
    username: ""
  };

  getErrorsFromValidationError = validationError => {
    const FIRST_ERROR = 0;
    return validationError.inner.reduce((errors, error) => {
      return {
        ...errors,
        [error.path]: error.errors[FIRST_ERROR]
      };
    }, {}); …
Run Code Online (Sandbox Code Playgroud)

javascript reactjs formik

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

在cookie中保存身份验证令牌(Django Rest Framework + React)

所以,正如标题所说我使用的是Django Rest Framework,结合了React.

我使用令牌认证对用户进行身份验证 现在我遇到了一个问题.当我重新加载页面时(例如,通过按F5键),所有状态都消失了,在这种情况下我无法保存令牌,要求用户再次登录.

我想过将令牌存放在cookie中,但这似乎不太安全.

还有其他问题,但没有答案真正解释了这有多大的安全风险.我觉得它很高,因为拥有令牌似乎足以作为后端的某人进行身份验证.

所以,我的问题是:我的假设是,将我的身份验证令牌存储在cookie中是不是安全吗?

注意:我正在考虑切换到基于会话的身份验证,但我宁愿保护我的工作并保持令牌身份验证.

security authentication django cookies

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

Django Rest Framework + React - 令牌与会话身份验证

虽然在 SO 上有很多关于这个主题(或密切相关)的帖子,但我没有找到我要找的东西。

正如标题所示,我使用 Django Rest Framework 作为后端,使用 React 作为前端。

现在我实现了令牌认证,它完美地工作。唯一的问题是token是保存在React的状态中的,如果用户刷新页面,他就不再登录了(token丢失了)。

所以,现在我想切换到会话身份验证,因为问题解决了。但这需要我做一些研究,在我去那里之前,我想知道这是否是最佳选择。

我的问题:

我是否需要使用会话身份验证来让用户保持登录状态,即使 React 的状态发生变化。或者我也可以通过令牌认证来实现同样的事情(以安全和负责任的方式?)

我想我可以将令牌保存在 cookie 中,但这对我来说似乎并不安全。

编辑:

后来我意识到,为什么不将令牌存储在会话中?

authentication django django-rest-framework reactjs

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

带有 flexbox 的粘性页脚

我发现了一种为我的网站创建粘性页脚的非常简单的方法,乍一看,它似乎工作得很好。

但是因为我没有看到其他人使用同样的东西,所以我想知道这种做法是否在根本不支持 flex-box 的浏览器之外被打破了?

我使用 bootstrap 来设置 flex-box,我在 React 中工作,这是我的代码:

<div className="body-div d-flex flex-column justify-content-between">
  <div>  <!-- inner div -->
    <MainNav/>
  </div>
  <MainFooter className="d-flex flex-column"/>
</div>
Run Code Online (Sandbox Code Playgroud)

对于不知道 react 的人:可以将外部 div 视为“正常”html 页面上的 body 元素。

body-div的css:

min-height: 100vh;
Run Code Online (Sandbox Code Playgroud)

所以基本上我通过将它们的容器设置为 flex-box 并将 justify-content 的属性设置为 space-between 来分别将内部 div 和主页脚推到顶部和底部。

另外我想补充一点,我网站的内容,除了页脚,将进入内部 div。

html css flexbox twitter-bootstrap react-native

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

VS Code 不使用 pipenv .env 文件

在带有 Python 3.7.3 pipenv 虚拟环境的 ubuntu 16.04 上使用 VS Code 1.35.1,我试图在 .env 文件中设置环境变量,但由于某种原因,该文件似乎无法识别。

有人可以帮助我了解如何让我的(Django)应用程序访问环境变量,而无需手动运行pipenv shell.

采取的步骤:
所以,这就是我正在做的事情:

1 - 我已经为我的项目设置了 Python 解释器,如下所示:ctrl + shift + p> Python: Select interpreter>Python 3.7.3 64-bit ('environment_name': pipenv)

2 - 在项目根目录中创建一个 .env 文件:

# Django
SECRET_KEY="some key here"
DEBUG=True

...
Run Code Online (Sandbox Code Playgroud)

3 - 确保安装并启用了 VS Code Python 扩展

4 - 调整我的 Django 设置文件以从环境变量中获取 SECRET_KEY:

SECRET_KEY = os.getenv('SECRET_KEY')

5 - 从 VS Code 终端运行 Django 开发服务器(通过 激活 pipenv 环境ctrl + …

django environment-variables visual-studio-code pipenv

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

如何在DRF + django-rest-auth中使用自定义用户模型保存有关注册的额外字段

使用带有django-rest-auth的Django REST Framework(DRF),我创建了一个带有一个额外字段的自定义用户模型。我的目标是使用django-rest-auth注册端点在一个请求中注册一个新用户,从而发送所有数据以创建一个新用户,包括多余字段的数据。

我正在使用AbstractUser,因为它似乎是推荐给初学者的,在初学者中,更高级的开发人员可以使用AbstractBaseUser。这也是为什么以下SO答案对于我想要实现的目标而言过于复杂的原因:链接此处

我知道这个问题已经被问过多次了,但是答案并不完全是我想要的。对于像我这样的初学者来说,这是一件复杂的事情。

所以,我的问题是,任何人都可以解释如何实现我想要的吗?

我在用:

Django              2.1.4
django-allauth      0.38.0
django-rest-auth    0.9.3
djangorestframework 3.9.0
Run Code Online (Sandbox Code Playgroud)

这是到目前为止的代码:

使用本教程来获得此代码

settings.py:

import os

# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/2.1/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = '!gxred^*penrx*qlb=@p)p(vb!&6t78z4n!poz=zj+a0_9#sw1'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = [] …
Run Code Online (Sandbox Code Playgroud)

django django-rest-framework django-allauth django-rest-auth

3
推荐指数
2
解决办法
1403
查看次数

如何使用VS Code调试Django自定义管理命令

我正在尝试使用Visual Studio Code调试自定义管理命令。

为此,我阅读了有关使用Python和Django的官方VS Code教程,并在遵循这些教程的同时设法调试了代码。

VS Code Python教程 / VS Code Django教程

问题在于,对于Python脚本(非Django),调试器有效,因为在文件选项卡打开时我运行了特定文件(通过按f5键)。Django调试之所以有效,是因为VS Code知道何时浏览器请求导致我的Django应用达到我在VS Code中输入的断点。

但是自定义管理命令的运行方式有所不同。为此,我在控制台中键入以下内容:

python manage.py name_of_management_command

如何在VS Code中调试此代码?

python django debugging visual-studio-code

3
推荐指数
2
解决办法
199
查看次数

找不到React模块:无法解析'../utils/api'

我创建了一个模块,在其中我保留了调用api的函数.虽然'要求',但我得到以下错误:

./src/Components/Search/SearchPage.js
Module not found: Can't resolve '../utils/api' in 'C:\Users\riksch\Dropbox\projects\Current\greenmp\frontend\src\Components\Search'
Run Code Online (Sandbox Code Playgroud)

我的主要问题是:如何将api模块正确导入SearchPage.js?

这是我的项目的结构:

在此输入图像描述

我突出显示了我使用的文件,1是我导入(需要)的文件,2是我尝试导入的模块.

这之前有用,但是现在我改变了文件夹结构,即使在调整路径之后,我也无法得到它.

我尝试了不同的导入路径,都有相同的错误.

SearchPage.js需要声明

const api = require('../utils/api')
Run Code Online (Sandbox Code Playgroud)

api.js

var axios = require('axios')


module.exports = {
  retrievePlants: function(search_query, locale) {
    console.log("api.retrievePlants executes")
    console.log("url: " + 'http://127.0.0.1:8000/search/'+locale+'/'+search_query)
    //FIXME: hardcoded URL HOST
    // return axios.get('https://127.0.0.1/search/'+locale+'/'+search_query)
    return axios.get('http://127.0.0.1:8000/search/'+locale+'/'+search_query)
      .then(function(response) {
        console.log("response.data:")
        console.log(response.data)
        return response.data
      })
      .catch(function(error) {
        console.log("Error in Components.utils.api.retrievePlants:")
        console.log(error)
        console.log("console.log(error.response.data):")
        console.log(error.response.data)
      })
  },
}
Run Code Online (Sandbox Code Playgroud)

javascript require importerror reactjs

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