通过GET请求注销已被弃用,并将在Django 5.0中移除

smtd7mpg  于 2022-12-24  发布在  Go
关注(0)|答案(1)|浏览(160)

我在用selenium和pytest运行测试时收到这个警告。

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, '//*[contains(text(), "Sign out")]').click()
    assert 'sign in' in page_source
    assert 'sign up' in page_source

这是生成警告的位置:

driver.find_element(By.XPATH, '//*[contains(text(), "Sign out")]').click()

这里是按钮:

<li><a class="dropdown-item" href={% url 'signout' %}>Sign out</a></li>

视图使用djangoLogoutView,下面是它的定义

from django.contrib.auth.views import LogoutView

urlpatterns = [
    path('signout/', LogoutView.as_view(), name='signout'),
    ...
]

什么是一个干净的方法来解决这个问题?

rhfm7lfc

rhfm7lfc1#

正如文档中提到的,您必须调用HTTP POST API,因此,最好将 "超链接" 替换为***"按钮"***(或类似的模拟HTTP POST请求的内容)。
我将使用简单的按钮实现,如下所示。

# logout-confirmation.html

<form method="post" action="{% url 'logout' %}">
    {% csrf_token %}
    <button type="submit">Sign Out</button>
</form>
# views.py

class LogOutRenderView(TemplateView):
    template_name = "logout-confirmation.html"
#urls.py

from django.contrib.auth.views import LogoutView
from .vies import LogOutRenderView

urlpatterns = [
    path("logout-confirmation/", LogOutRenderView.as_view(), name="logout-confirmation"),
    path("logout/", LogoutView.as_view(), name="logout"),
    
]
    • 注意**:您可以用<form...> ... </form>块替换超链接。

相关问题