繁体   English   中英

对“/”的 POST 请求返回 403 禁止

[英]POST request to “/” returns a 403 forbidden

我正在尝试通过 POST 请求向 / 路由发送 320 个字符的文本帖子。 在这条路线上,我有一个类似 Twitter 的社交网络网站,用于发布帖子和关注用户。 为了制作和写帖子,我希望它是异步的,我的意思是,我希望用户写一篇文章,当他按下按钮发布它时,不应该重新加载页面。

这是我的 html 文件:

<div class="container">
  <h1>All Posts</h1>
    <div class="row">
        <div class="span12 well">
            <form method="post">
              {% csrf_token %}
                <textarea class="span11" id="new_message" name="new_message"
                placeholder="Write something nice" rows="5"></textarea>
                <h6 id="characters">320 characters remaining</h6>
                <button class="btn btn-info" type="submit">Post New Message</button>
            </form>
        </div>
    </div>
</div>

这就是我在 JavaScript 中尝试做的事情,但我得到了 403:

document.querySelector("form").onsubmit = () => {
    //sending values by POST method
  fetch('/', {
    method: 'POST',
    body: JSON.stringify({
      content: document.querySelector('#new_message').value,
    })
  })
  .then(response => response.json())
  .then(result => {

      // Print result
      console.log(result);
    })

  event.preventDefault()
  }


});

我也不太确定这是否是正确的方法。

后端:

def index(request):
    if request.method == "POST":
        content = request.POST["new_message"]
        print(request.user)
        print(content)
        return render(request, "network/index.html")
        #post = Posts(user=request.user, content=content)
    return render(request, "network/index.html")


def login_view(request):
    if request.method == "POST":

        # Attempt to sign user in
        username = request.POST["username"]
        password = request.POST["password"]
        user = authenticate(request, username=username, password=password)

        # Check if authentication successful
        if user is not None:
            login(request, user)
            return HttpResponseRedirect(reverse("index"))
        else:
            return render(request, "network/login.html", {
                "message": "Invalid username and/or password."
            })
    else:
        return render(request, "network/login.html")


def logout_view(request):
    logout(request)
    return HttpResponseRedirect(reverse("index"))


def register(request):
    if request.method == "POST":
        username = request.POST["username"]
        email = request.POST["email"]

        # Ensure password matches confirmation
        password = request.POST["password"]
        confirmation = request.POST["confirmation"]
        if password != confirmation:
            return render(request, "network/register.html", {
                "message": "Passwords must match."
            })

        # Attempt to create new user
        try:
            user = User.objects.create_user(username, email, password)
            user.save()
        except IntegrityError:
            return render(request, "network/register.html", {
                "message": "Username already taken."
            })
        login(request, user)
        return HttpResponseRedirect(reverse("index"))
    else:
        return render(request, "network/register.html")

由于 403 表示禁止,我会尝试检查您尝试调用的实体的权限。 确保正确的文件具有正确级别的执行权限。 通过 apache 或您使用的其他 web 服务器检查您的错误日志,访问日志可能会在那里找到一些东西。 此外,在您的 JS 中,您正在向控制台记录一些内容,JS 向控制台推送了什么?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM