Django中GET请求登出已弃用,如何解决测试中的警告?
修复Django登出GET请求弃用警告的简洁方案
1. 前端模板修改:替换GET链接为POST表单
把原来的<a>标签换成POST提交的表单,保持原有样式:
<li> <form action="{% url 'signout' %}" method="post" class="d-inline"> {% csrf_token %} <button type="submit" class="dropdown-item border-0 bg-transparent p-0">Sign out</button> </form> </li>
- 用POST请求替代GET,符合Django的安全规范
- 添加
{% csrf_token %}满足Django的CSRF校验要求 - 按钮样式和原链接一致,视觉上无变化
2. 视图层限制仅接受POST请求(推荐)
修改LogoutView的配置,明确拒绝GET请求,从根源避免警告:
from django.contrib.auth.views import LogoutView urlpatterns = [ path('signout/', LogoutView.as_view(http_method_names=['post']), name='signout'), ... ]
3. 测试代码调整
更新Selenium的元素定位逻辑,改为点击POST提交按钮,同时注意重新获取页面源码(原来的page_source是点击前的旧内容,会导致断言失败):
def test_registration( self, driver, live_server, valid_user_data, django_user_model ): selenium_signup(driver, live_server, valid_user_data, django_user_model) selenium_sign_in(driver, live_server, valid_user_data) page_source = driver.page_source.lower() assert 'sign in' not in page_source assert 'sign up' not in page_source assert 'sign out' in page_source driver.find_element(By.ID, 'btnGroupDrop1').click() # 替换原点击链接的代码为点击提交按钮 driver.find_element(By.XPATH, '//button[contains(text(), "Sign out")]').click() # 点击后重新获取页面源码 page_source = driver.page_source.lower() assert 'sign in' in page_source assert 'sign up' in page_source
内容的提问来源于stack exchange,提问作者watch-this
相关产品推荐
相关产品推荐

