0

我正在尝试创建一个简单的 django 站点,该站点将使用该 requests.post功能将信息发送到另一个站点(我假设这是一个正确的方法,但也许有更好的方法)。

到目前为止,我有一个使用引导程序创建的简单 .html 文件

<div class="form-group">
    <label for="exampleFormControlInput1">text_thing</label>
    <input type="text" class="form-control" placeholder="text_thing" name="text_thing">
</div>
<div class="form-group">
    <label for="exampleFormControlInput1">number_thing</label>
    <input type="number" class="form-control" placeholder="number_thing" name="number_thing">
</div>
<button type="submit" class="btn btn-secondary">Send data</button>
</form>

和我的views.py

from django.shortcuts import render, redirect
import requests

def my_view(requests):
    if requests.method == "POST":
        text_thing=  request.GET.get('text_thing')
        number_thing= request.GET.get('number_thing')
        post_data = {'text_thing', 'number_thing'}
        if text_thing is not None:
            response = requests.post('https://example.com', data=post_data)
            content = reponse.content
            return redirect('home')
        else:
            return redirect('home')
    else:
        return render(requests, 'my_view.html', {})

我希望该站点执行以下操作:呈现自身允许用户在两​​个字段中输入内容,并在按下按钮后重定向到另一个站点 - 在这种情况下'home',输入发送到example.com. 此时页面正确呈现,但按下按钮后没有任何反应,外部站点也没有收到任何数据。

4

3 回答 3

1

你的代码中有很多错别字。你requestsrequest. 您正在导入 requests 模块并将其传递给my_view()不正确的模块。

my_view()是一个视图函数,它接受一个request对象,而不是requests库。

而且您还应该使用 request.POST 来获取有效负载。request.GET 返回查询参数而不是有效负载。

这是更新的代码

from django.shortcuts import render, redirect
import requests

def my_view(request):
    if request.method == "POST":
        text_thing=  request.POST.get('text_thing')
        number_thing= request.POST.get('number_thing')
        post_data = {'text_thing', 'number_thing'}
        if text_thing is not None:
            response = requests.post('https://example.com', data=post_data)
            content = reponse.content
            return redirect('home')
        else:
            return redirect('home')
    else:
        return render(request, 'my_view.html', {})
于 2020-10-20T10:27:43.347 回答
1

您的代码中有几个错误需要先修复

...

def my_view(requests):
    if requests.method == "POST":
        # Here is 1, use POST instead
        # text_thing=  request.GET.get('text_thing')
        # number_thing= request.GET.get('number_thing')
        # https://docs.djangoproject.com/en/3.1/ref/request-response/#django.http.HttpRequest.POST

        text_thing = request.POST.get('text_thing', None)
        number_thing = request.POST.get('number_thing', None)
        # Here is 2, you are not creating a dict this way,
        # You are creating a set, put the variables with the keys.
        post_data = {'text_thing': text_thing, 'number_thing': number_thing}
        ....

如果您的站点没有收到任何数据,请检查来自其他站点的响应,以确保您正在调用正确的 API。

我希望这有帮助

于 2020-10-20T09:22:00.800 回答
0

感谢@Radwan Abu-Odeh 和@Underoos,我设法让它工作。非常感谢您的帮助。

工作示例:.html 代码

<form method="POST">
<div class="form-group">
    <label for="exampleFormControlInput1">text_thing</label>
    <input type="text" class="form-control" placeholder="text_thing" name="text_thing">
</div>
<div class="form-group">
    <label for="exampleFormControlInput1">number_thing</label>
    <input type="number" class="form-control" placeholder="number_thing" name="number_thing">
</div>
<button type="submit" class="btn btn-secondary">Send data</button>
</form>

视图.py

def my_view(request):
    if request.method == "POST":
        text_thing=  request.POST.get('text_thing', None)
        number_thing= request.POST.get('number_thing', None)
        post_data = {'text_thing': text_thing, 'number_thing': number_thing}
        if text_thing is not None:
            response = requests.post('example.com', data=post_data)
            return redirect('home')
        else:
            return redirect('home')
    else:
        return render(request, 'my_view.html', {})
于 2020-10-20T10:54:17.393 回答