You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 04:02:58