搜索

首页  >  问答  >  正文

python - django request请求问题求助

urls.py

from django.conf.urls import url
from django.contrib import admin
from blog import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^$', views.index),
    url(r'^abc$',views.handler),
]



views.py
# -*- coding: utf-8 -*-
from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.

def index(request):
    return render(request,"index.html")


def handler(request):
    return HttpResponse("<p>name:</p>" + request.POST['username'])



index.html
<!doctype html>
<html>
    <head>
        <meta charset="UTF-8"/>
        <title>index page</title>
    </head>
    <body>
       <form action="abc" method="POST">
               <input type="text" name="username">
               <button id="btn">提交</button>
       </form>
    </body>
</html>


我在谷歌浏览器下点击这个提交后出现了

我又直接打开abc网站 出现了



请问这是什么问题啊 要怎么解决啊 ?
大家讲道理大家讲道理2785 天前707

全部回复(4)我来回复

  • 巴扎黑

    巴扎黑2017-04-18 09:20:22

    在 Django 中, 使用 post 的时候很可能会出现以下错误:

    Forbidden(403):
    CSRF verification failed. Request aborted.
    Reason given for failure:
        CSRF token missing or incorrect.

    这是因为Django 帮我们启动了CSRF攻击 的防护,CSRF(cross-site request forgery) 是恶意的跨站请求或伪装使用者的攻击,攻击者会欺骗用户的浏览器去访问一个认证过的网站并且执行一些恶意的操作。由于用户的浏览器已经被该网站认证过了,所以该网站会放心的让这些操作被执行(即便这些操作并非该网站要求的或是不是用户自愿的)。

    所以我们的伺服器需要一些有保护的措施。常见的一种防护手段,就是使用一个伺服器产生的乱数 token,夹带在送给客户端的表单中,当客户端送回表单时,伺服器检查这个 token 是不是自己发出,便可以防止攻击。

    由于在settings.py 档中的MIDDLEWARE_CLASSES 中有预设的'django.middleware.csrf.CsrfViewMiddleware',所以Django 在这里便会要求CSRF token 验证,为了让我们的网站更安全,我们还是照着游戏规则一步一步来吧!settings.py 檔中的 MIDDLEWARE_CLASSES 中有預設的 'django.middleware.csrf.CsrfViewMiddleware',所以 Django 在這裡便會要求 CSRF token 驗證,為了讓我們的網站更安全,我們還是照著遊戲規則一步一步來吧!

    在html的<form>中加入{% csrf_token %}

    在html的<form>中加入{% csrf_token %}如下:

    ...
             <form action="" method="post"> {% csrf_token %}
    ...

    就可以解决问题了

    我回答过的问题

    : Python-QA🎜

    回复
    0
  • 高洛峰

    高洛峰2017-04-18 09:20:22

    雷雷

    回复
    0
  • 天蓬老师

    天蓬老师2017-04-18 09:20:22

    <button id="btn">提交</button> 写成<input type="submit" value="submit">, 当然{% csrf_token %}不能少

    回复
    0
  • ringa_lee

    ringa_lee2017-04-18 09:20:22

    有个简单点的方法 把settings文件中csrf的配置注释掉。。

    回复
    0
  • 取消回复