从Django View提交POST请求并将响应发送到模板

时间:2018-04-16 09:14:04

标签: python django django-rest-framework django-views jwt

我正在开发一个Django(1.10)项目,现在正在使用Django Rest Framework为我的项目创建一个rest API。我已经设置了JWT令牌,现在我想为用户提供一个模板,他可以在那里生成一个令牌。 以下是身份验证令牌的网址:

url(r'^api-token-auth/', obtain_jwt_token)

我想从一个视图发送一个帖子请求到一个视图,该视图加载生成一个令牌,但它需要用户的usernamepassword

如何通过当前用户的usernamepassword

以下是我的观点:

class GetApiAuthToken(LoginRequiredMixin, CreateView):
    def get(self, request, *args, **kwargs):
        return render(request, 'dockerDep/getApiAuthToken.html', {})

    def post(self, request, *args, **kwargs):
        if request.method == 'POST':
            post_data = request.POST.copy()
            post_data.update({'user': request.user.pk})
            payload = {'username': request.user.username, 'password': request.user.password}
            r = requests.post('http://127.0.0.1:8000/api-token-auth/', params=payload)
            return HttpResponse('Get token auth request and data is as: {}'.format(r.text))

这是用户可以点击按钮生成令牌的模板:

<div class="col-md-9 content">
        <div class="world-map" style="width: 100%; margin-left:2%">
            <h3> Get your Authorization Token to use REST Api :</h3>
        </div>
        <div class="col-lg-6" style="margin-top: 20%;  margin-left: 25%;"><br>
            <form action="{% url 'users:getApiAuthToken' %}" method="post" id="getTokenForm">
                {% csrf_token %}
                <a href="" style="text-decoration: none; color: white;">
                <button type="submit" class="btn waves-effect waves-light  pull-right" value="Submit" id="enableApi" style="padding-right: 10%; font-size: 20px;"><i
                            class="material-icons left">casino</i>  Generate Api Token!</button></a>
            </form>
    </div>
</div>

这里我正在向视图发送一个AJAX POST reuqest:

$(document).on('submit', '#getTokenForm', function (e) {
    e.preventDefault();
    $.ajax({
        url: '{% url 'users:getApiAuthToken' %}',
        type: 'POST',
        data: {
            csrfmiddlewaretoken: $('input[name=csrfmiddlewaretoken]').val()
        },
        success: function (data) {
            console.log(data);
        }
    });
});

如何传递用户的凭据?或者是否有更好的方法允许用户生成令牌?

0 个答案:

没有答案