我正在使用最新版本的react-router模块,名为react-router-dom,在使用React开发Web应用程序时已成为默认设置.我想知道如何在POST请求后进行重定向.我一直在制作这段代码,但在请求之后,没有任何反应.我在网上查看,但所有数据都是关于反应路由器的先前版本,而不是最后一次更新.
码:
import React, { PropTypes } from 'react';
import ReactDOM from 'react-dom';
import { BrowserRouter } from 'react-router-dom';
import { Redirect } from 'react-router'
import SignUpForm from '../../register/components/SignUpForm';
import styles from './PagesStyles.css';
import axios from 'axios';
import Footer from '../../shared/components/Footer';
class SignUpPage extends React.Component {
constructor(props) {
super(props);
this.state = {
errors: {},
client: {
userclient: '',
clientname: '',
clientbusinessname: '',
password: '',
confirmPassword: ''
}
};
this.processForm = this.processForm.bind(this);
this.changeClient = this.changeClient.bind(this);
}
changeClient(event) {
const field = …Run Code Online (Sandbox Code Playgroud) 我下载了postgres的docker容器:https://hub.docker.com/r/library/postgres/,并执行了以下操作:
$ docker run --name satgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
satgres | "docker-entrypoint.s…" | 5 seconds ago | Up 6 seconds | 0.0.0.0:5432->5432/tcp | satgres
$ docker exec -it c8f1b22cc41e /bin/bash
# psql -U postgres
psql (10.1)
postgres=# CREATE DATABASE mytest;
postgres=# \password postgres
postgres=# CREATE ROLE ming WITH LOGIN PASSWORD 'pass1234';
postgres=# ALTER ROLE ming CREATEDB;
postgres=# CREATE DATABASE sjk;
postgres=# GRANT ALL PRIVILEGES ON DATABASE youtube TO ming;
postgres=# \connect sjk
youtube=# …Run Code Online (Sandbox Code Playgroud) 我已经安装了 drf-yasg,它运行良好。我遇到的问题是它是一个很大的应用程序,并且对于每种类型的前端客户端都有大量的端点,即/admin/v1, /app/v1, ...
所以我认为将每种类型的文档分开是个好主意,即
urlpatterns += [
url(r'^/admin/swagger/$', admin_schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
url(r'^/app/swagger/$', app_schema_view.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'),
]
Run Code Online (Sandbox Code Playgroud)
所以看起来 drf-yasg 支持这一点,通过提供patterns给get_scheme_view:
admin_schema_view = get_schema_view(
openapi.Info(
title="API",
default_version='v1',
description="The set of API endpoints used.",
terms_of_service="https://www.google.com/policies/terms/",
contact=openapi.Contact(email="contact@me"),
license=openapi.License(name="BSD License"),
),
patterns=?????,
validators=['flex', 'ssv'],
public=True,
permission_classes=(permissions.AllowAny,),
)
Run Code Online (Sandbox Code Playgroud)
现在我的猜测是提供一个字符串,与定义时的第一个字符串相同urls,例如patterns=r'^admin/v1/',导致:
File "/usr/local/lib/python3.6/dist- packages/rest_framework/compat.py", line 55, in get_original_route
return urlpattern.regex.pattern
AttributeError: 'str' object has no attribute 'regex'
Run Code Online (Sandbox Code Playgroud)
因此,使用drf-yasg docs 中的文档:
模式 - 如果给定,则只会枚举这些模式以包含在 API …
我的 drf 的响应仅包含单个序列化程序给出的数据,我们可以将其实现为:
@swagger_auto_schema(
operation_id='ID example',
operation_description="Description example.",
responses={status.HTTP_200_OK: Serializer4ModelA(many=True)},
)
Run Code Online (Sandbox Code Playgroud)
效果很好,但是有些请求构建了一个字典,其中两个或三个键对应于不同的序列化程序,例如
response = {
"a": serializer_data_for_model_a,
"b": serializer_data_for_model_b,
"c": serializer_data_for_model_c
}
Run Code Online (Sandbox Code Playgroud)
我们如何在自动模式中描述它?我尝试了几种不同的方法,大多类似于以下方法:
@swagger_auto_schema(
operation_id='ID example',
operation_description="Description example.",
responses={status.HTTP_200_OK: openapi.Response(
description='response description',
schema=openapi.Schema(
type=openapi.TYPE_OBJECT,
properties={
'a': Serializer4ModelA(many=True),
'b': Serializer4ModelB(many=True),
'c': Serializer4ModelC(many=True)
})
)}
)
Run Code Online (Sandbox Code Playgroud)
但是在加载文档时总是失败,并flex说:
"/usr/local/lib/python3.6/site-packages/flex/utils.py", line 125, in
get_type_for_value raise ValueError("Unable to identify type of
{0}".format(repr(value)))
ValueError: Unable to identify type of
Serializer4ModelA(many=True):
Run Code Online (Sandbox Code Playgroud)
我一遍又一遍地阅读文档,并在 github 上搜索了一个例子,但我找不到一个例子或任何人这样做。所以我的问题是如何成功为响应手动定义架构,该架构包含针对返回响应中不同键的不同序列化程序?
django ×2
swagger ×2
database ×1
docker ×1
javascript ×1
postgresql ×1
react-router ×1
reactjs ×1