1. 程式人生 > 其它 >url導致的Forbidden (CSRF token missing or incorrect.)

url導致的Forbidden (CSRF token missing or incorrect.)

技術標籤:python djangopython

最近在用Django做專案,遇到的一個問題。
之前配置的url如下:

    re_path('^aaa/(?P<pk>\d+)/$', categories.delete, name='aaa_view'),
    path('aaa/data_import/', categories.data_import, name='aaa_data_import'),

此時訪問data_import頁面,進行操作都正常。
之後將url的正則匹配改為如下:

    re_path('^aaa/(?P<pk>\w+)/$', categories.
delete, name='aaa_view'), path('aaa/data_import/', categories.data_import, name='aaa_data_import'),

再訪問之前的data_import頁面,會報下邊的錯誤資訊。
在這裡插入圖片描述
網上查了一下,很多解決方法都是基於前端的方式,但我遇到的這種情況,屬於之前可用,說明前端處理以及配置是正確的。
之前以為將\d+改為\w+影響了csrf的處理,但找了官方文件,未發現明確說明。
但這裡分明是上一條url影響了下一條,將views裡的返回配置也進行了各種驗證,依然存在問題。
經過反覆的debug,將aaa_view的url註釋掉,訪問data_import頁面也正常

    # re_path('^aaa/(?P<pk>\w+)/$', categories.delete, name='aaa_view'),
    path('aaa/data_import/', categories.data_import, name='aaa_data_import'),

此時的確感覺無解了,後來突然靈光一閃,既然是前一條影響後一條,那將它們換個位置吧,如下

    path('aaa/data_import/', categories.data_import, name='aaa_data_import'),
    re_path('^aaa/(?P<pk>\w+)/$'
, categories.delete, name='aaa_view'),

然後莫名的好了,應該與url的機制有關,目前不想深挖,此處Mark下,後邊有空了進一步的研究下。