我正在使用 drf_yasg 来自我记录我的 API,该 API 是使用 django 框架构建的,但任何端点都没有显示任何参数。我的方法是以 JSON 格式在 http 请求正文中传递参数。然后我从 request.data 读取参数。下面是其中一个视图的示例,其中它将“id”作为请求正文中的参数。
@api_view(['POST'])
@permission_classes([IsAuthenticated])
def get_availability_by_schoolid(request):
if request.user.is_donor:
try:
#Get the existing slots and remove them to replace with new slots
slots = SchoolSlot.objects.filter(school__id=request.data["id"]).values('day','am','pm')
availability = process_availability(slots)
availabilityslotserializer = SchoolSlotSerializer(availability)
return Response(availabilityslotserializer.data, status=status.HTTP_200_OK)
except Exception as e:
print(e)
return Response(ResponseSerializer(GeneralResponse(False,"Unable to locate school")).data, status=status.HTTP_400_BAD_REQUEST)
else:
return Response(ResponseSerializer(GeneralResponse(False,"Not registered as a donor")).data, status=status.HTTP_400_BAD_REQUEST)
Run Code Online (Sandbox Code Playgroud)
这将在 swagger 文档中显示如下:
我一直在查看文档,它表明我可能需要添加带有手动参数的装饰器,但我不知道如何做到这一点,因为我能找到的示例是获取查询参数或路径参数。我在下面添加了装饰器,它可以响应文档。
@swagger_auto_schema(method='post', responses={200: SchoolSlotSerializer,400: 'Bad Request'})
Run Code Online (Sandbox Code Playgroud)
请求正文的示例如下:
{ "id": 43 }
Run Code Online (Sandbox Code Playgroud)
更新:
我似乎通过以下装饰器得到了一些东西: …
我想编写一个查询,该查询将根据模型中的日期与现在的日期/时间的比较来添加过期注释,并根据结果接收布尔值。我找不到这是如何完成的。
到目前为止我已经尝试过以下操作:
.annotate(expired=F( F('date_updated') > datetime_now))
Run Code Online (Sandbox Code Playgroud)
有人可以让我知道实现这一目标的方法吗?
在我的生产服务器上,我收到以下错误
“ init () 收到意外的关键字参数 'apikey'”
开发服务器上的相同代码正在运行。
我的生产服务器正在运行gunicorn,并且我已将环境变量SENDGRID_API_KEY添加到gunicorn.service文件中。我已经重新启动了gunicorn和nginx。我可以看到环境变量已加载。
我调用发送电子邮件的方法如下:
def sendtestemail(to):
sg = sendgrid.SendGridAPIClient(apikey=os.environ.get('SENDGRID_API_KEY'))
from_email = Email("<myemail>@<mydomain>.com")
to_email = Email(to)
subject = "Sending with SendGrid is Fun"
content = Content("text/plain", "and easy to do anywhere, even with Python")
mail = Mail(from_email, subject, to_email, content)
response = sg.client.mail.send.post(request_body=mail.get())
return [response.status_code, response.body, response.headers]
Run Code Online (Sandbox Code Playgroud) 在我的主课中,我有一个导航栏,其中包含以下选项:
<NavDropdown title="Search" id="collasible-nav-dropdown">
<NavDropdown.Item href="#/searchpage/p" onClick={this.dontEdit}>Find People</NavDropdown.Item>
<NavDropdown.Item href="#/searchpage/s" onClick={this.searchSchool}>Find Schools</NavDropdown.Item>
<NavDropdown.Item href="#/searchpage/w" onClick={this.dontEdit}>Find Work Places</NavDropdown.Item>
</NavDropdown>
Run Code Online (Sandbox Code Playgroud)
它们有一个路由到同一组件的路由,然后该组件读取 URL 末尾的参数并根据值运行不同的搜索。例如,'s' 是搜索学校,'p' 是搜索人。如果我在导航栏的不同搜索功能之间导航,则它不会刷新到新搜索。例如,如果我从“Find Schools”转到“Find Work”,它会留在学校,但如果我要直接转到“Find Work Places”,则它会直接转到那里。此外,如果我导航到主页并返回另一个搜索,那么它就可以工作。
路线看起来像:
<Route path="/searchpage/:type" render={props => (<SearchPage {...props} findPerson={this.findPerson} routeReset={this.routeReset} getPersonsByName={this.getPersonsByName} />)}/>
Run Code Online (Sandbox Code Playgroud)
有没有人能够建议如何让它按照我的意愿进行路由?搜索组件是这样的:
import Row from 'react-bootstrap/Row';
import Col from 'react-bootstrap/Col';
import Container from 'react-bootstrap/Container';
import Button from 'react-bootstrap/Button';
import Flash from './components/flash';
import Search from "./components/search";
const searchtypes = {"p":"People","w":"Work Places","s":"Schools"};
class SearchPage extends Component {
constructor(props) {
super(props);
this.state = {
type:this.props.match.params.type …Run Code Online (Sandbox Code Playgroud) django ×2
django-orm ×1
drf-yasg ×1
javascript ×1
python ×1
react-router ×1
reactjs ×1
sendgrid ×1
swagger ×1