Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django CSRF问题_Python_Django_Csrf - Fatal编程技术网

Python Django CSRF问题

Python Django CSRF问题,python,django,csrf,Python,Django,Csrf,我正在尝试创建一个简单的登录框架,以便稍后在我的站点中使用,目前它非常基本,但我一直被Django CSRF保护所阻碍 我已采取的步骤: MIDDLEWARE_CLASSES = ( 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware',

我正在尝试创建一个简单的登录框架,以便稍后在我的站点中使用,目前它非常基本,但我一直被Django CSRF保护所阻碍

我已采取的步骤:

MIDDLEWARE_CLASSES = (
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.SessionAuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'django.middleware.security.SecurityMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
)
启用了CSRFViewMiddleware

def request_page(request):
if(request.POST.get('btnLogin')):

    if(handleLogin( (request.POST.get('TFUsername')), (request.POST.get('TFPassword')))):
        return HttpResponse("yep")
    else:
        return HttpResponse("nope")
在login handler.py中调用此方法

def handleLogin(enteredUsername, enteredPassword):
EvalDBLogin.objects
b = EvalDBLogin(username = enteredUsername,password = enteredPassword)
if b.exists():
    return True
else:
    return False
view函数将请求传递给模板的render方法,如上所示

每个表单元素都包含{%csrf_token%}

 <td width="252">&nbsp;</td>
    <td width="272"><table width="258" height="115" border="0" align="center">
      <tr>
        <td width="248" height="27"><form id="form1" name="form1" method="post" action="#">{% csrf_token %}
          <label for="TFUsername"></label>
          <input name="TFUsername" type="text" class="loginBoxes" id="TFUsername" value="username" size="100" maxlength="42" border="5" width="200px"/>
       </td>
      </tr>
      <tr>
        <td height="26"><input name="TFPassword" type="password" class="loginBoxes" id="TFPassword" value="password" size="42" maxlength="42" /></td>
      </tr>
      <tr>
        <td height="43">



          <input type="submit" name="btnLogin" id="btnLogin" value="Submit" />
        </form></td>
      </tr>
      </table></td>
    <td width="252">&nbsp;</td>
  </tr>
</table></td>
我是否遗漏了什么,或者这是一个技术问题

问题显示:

我知道关于这个问题已经有几个问题了,但是我找不到一个完全回答我问题的

作为旁注,如果我将下面的方法从csrf中豁免,则返回相同的错误

非常感谢您的帮助

呈现的Html:

 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Login</title>
<style type="text/css">
    .loginBoxes {
    font-family: "Comic Sans MS", cursive;
    font-size: 14px;
    color: #AFAFAF;
    background-color: #F8F8F8;
    text-align: center;
    width: auto;
}
#TFUsername {
    border-radius: 15px 50px;
    padding: 20px; 
    width:  300px;
    height: 20px; 
} 
#TFPassword {
    border-radius: 15px 50px;
    padding: 20px; 
    width:  300px;
    height: 20px; 
} 
#btnLogin{
    border-radius: 25px;
    background: #0066FF;
    display: table-cell;
    width:  310px;
    display:table-cell;
    margin:auto;
    display:block;
    height: 31px; 
}
</style>
</head>

<body>
<table width="800" height="722" border="0" align="center">
  <tr>
  </tr>
  <tr>
    <td><table width="800" height="253" border="0" align="center">
      <tr>
        <td width="252">&nbsp;</td>
        <td width="272"><table width="258" height="115" border="0" align="center">
          <tr>
            <td width="248" height="27"><form id="form1" name="form1" method="post" action="#">
              <label for="TFUsername"></label>
              <input name="TFUsername" type="text" class="loginBoxes" id="TFUsername" value="username" size="100" maxlength="42" border="5" width="200px"/>
           </td>
          </tr>
          <tr>
            <td height="26"><input name="TFPassword" type="password" class="loginBoxes" id="TFPassword" value="password" size="42" maxlength="42" /></td>
          </tr>
          <tr>
            <td height="43">



              <input type="submit" name="btnLogin" id="btnLogin" value="Submit" />
            </form></td>
          </tr>
          </table></td>
        <td width="252">&nbsp;</td>
      </tr>
    </table></td>
  </tr>
  <tr>
    <td>&nbsp;</td>
  </tr>
</table>
</body>
</html>

您已经包含了两次csrf中间件。您可以第二次删除它

'django.middleware.csrf.CsrfViewMiddleware',
您可以删除
csrf\u protect
decorator,因为您使用的是中间件,所以默认情况下所有视图都将受到保护

由于您使用的是
RequestContext
,因此可以从模板上下文处理器中删除
“django.core.context\u processors.csrf”
,因为它总是包含在模板上下文处理器中

请求上下文应该是
render_to_response
的第三个参数,而不是第二个:

return render_to_response('loginSystem/index1.html', {}, csrfContext)
但是您最好使用
render
快捷方式,这样就根本不需要请求上下文

from django.shortcuts import render

return render(request, 'loginSystem/index1.html')

如果在进行这些更改后仍然无法使用,请更新上面的问题,并在文章中添加呈现模板的外观。

您已经两次添加了csrf中间件。您可以第二次删除它

'django.middleware.csrf.CsrfViewMiddleware',
您可以删除
csrf\u protect
decorator,因为您使用的是中间件,所以默认情况下所有视图都将受到保护

由于您使用的是
RequestContext
,因此可以从模板上下文处理器中删除
“django.core.context\u processors.csrf”
,因为它总是包含在模板上下文处理器中

请求上下文应该是
render_to_response
的第三个参数,而不是第二个:

return render_to_response('loginSystem/index1.html', {}, csrfContext)
但是您最好使用
render
快捷方式,这样就根本不需要请求上下文

from django.shortcuts import render

return render(request, 'loginSystem/index1.html')

如果在进行这些更改后仍然无法使用,请更新上面的问题,并在文章中添加呈现模板的外观。

您已经两次添加了csrf中间件。您可以第二次删除它

'django.middleware.csrf.CsrfViewMiddleware',
您可以删除
csrf\u protect
decorator,因为您使用的是中间件,所以默认情况下所有视图都将受到保护

由于您使用的是
RequestContext
,因此可以从模板上下文处理器中删除
“django.core.context\u processors.csrf”
,因为它总是包含在模板上下文处理器中

请求上下文应该是
render_to_response
的第三个参数,而不是第二个:

return render_to_response('loginSystem/index1.html', {}, csrfContext)
但是您最好使用
render
快捷方式,这样就根本不需要请求上下文

from django.shortcuts import render

return render(request, 'loginSystem/index1.html')

如果在进行这些更改后仍然无法使用,请更新上面的问题,并在文章中添加呈现模板的外观。

您已经两次添加了csrf中间件。您可以第二次删除它

'django.middleware.csrf.CsrfViewMiddleware',
您可以删除
csrf\u protect
decorator,因为您使用的是中间件,所以默认情况下所有视图都将受到保护

由于您使用的是
RequestContext
,因此可以从模板上下文处理器中删除
“django.core.context\u processors.csrf”
,因为它总是包含在模板上下文处理器中

请求上下文应该是
render_to_response
的第三个参数,而不是第二个:

return render_to_response('loginSystem/index1.html', {}, csrfContext)
但是您最好使用
render
快捷方式,这样就根本不需要请求上下文

from django.shortcuts import render

return render(request, 'loginSystem/index1.html')


如果在进行这些更改后仍然无法使用,请更新上面的问题,并在文章中加入呈现模板的外观。

出于某种原因,该页面上似乎有多个表单。您只需要一个表单就可以提交用户名和密码,并且在该表单中只需要一个
csrf\u token
。是的,很抱歉,我应该将其添加到question@grantmcconnaughey谢谢,我已经修改了上面的代码。你的实际问题是什么?为什么要将
TFUsername
TFPassword
转换为int,然后再将它们传递给
handleLogin
?403给出了失败的错误原因:CSRF令牌丢失或不正确。出于某种原因,该页面上似乎有多个表单。您只需要一个表单就可以提交用户名和密码,并且在该表单中只需要一个
csrf\u token
。是的,很抱歉,我应该将其添加到question@grantmcconnaughey谢谢,我已经修改了上面的代码。你的实际问题是什么?为什么要将
TFUsername
TFPassword
转换为int,然后再将它们传递给
handleLogin
?403给出了失败的错误原因:CSRF令牌丢失或不正确。出于某种原因,该页面上似乎有多个表单。您只需要一个表单就可以提交用户名和密码,并且在该表单中只需要一个
csrf\u token
。是的,很抱歉,我应该将其添加到question@grantmcconnaughey谢谢,我已经修改了上面的代码。你的实际问题是什么?为什么要将
TFUsername
TFPassword
转换为int,然后再将它们传递给
handleLogin
?403给出了失败的错误原因:CSRF令牌丢失或不正确。出于某种原因,该页面上似乎有多个表单。您只需要一个表单就可以提交用户名和密码,并且在该表单中只需要一个
csrf\u token
。是的,很抱歉,我应该将其添加到question@grantmcconnaughey谢谢,我已经修改了上面的代码。你的实际问题是什么?为什么要转换
TFUsername
TFPassword