学习django3过程中的坑

最近跟着Django by Example 2015学习,可老想用最新版的Django3。在学的过程中可踩了不少坑。

今天就又碰到一个:

在这本书中96页有这样的代码:

url(r'^login/$', 'django.contrib.auth.views.login', name='login'),

第一个坑:url被path替代。

第二个坑:上面的第二个参数已经不能用' xxx'这样的格式。我从

django.contrib.auth中导入login,将上面的语句改为:

path('login/', login, name='login')(因为,django.contrib.auth.views.login中已经没有login了),

但服务器启动没事,一用到这个路由,就报错。好像是login函数获得的参数不对。

查了一个晚上,终于找到了原因所在。那个参数位置应该是一个视图函数的位置,而我们引入的

只不过是一个login登录函数。这个登录函数自然需要一个user参数了。这就是为什么报错缺少参数的原因了。

在django3中应该这样解决:

1 #首先导入:
2 
3 from django.contrib.auth.views import LoginView
4 
5 #然后,路由这样写:
6 urlpatterns = [
7      path('login/', LoginView.as_view(), name='login'),
8 ]

这样问题得到了解决!

教训:我纯粹是业余爱好,又喜欢新的东西,所以,不怕踩坑!如果要讲效率,还是要和书上的环境一致才好!

27日增加:

今天又研究了一天,终于把这个用户认证这一块搞明白了!实际上用户认证主一块Django已经给我们准备好了!Djnago3中只用把相关的路由文件导入就可以用了!

你打开这个Django.contrib.auth.urls一看就全明白了。

只需要在你的应用的路由文件中加入一行:

path('', include('Django.contrib.auth.urls'))

这个文件里没别的东西,就是几条路由!

 1 # The views used below are normally mapped in django.contrib.admin.urls.py
 2 # This URLs file is used to provide a reliable view deployment for test purposes.
 3 # It is also provided as a convenience to those who want to deploy these URLs
 4 # elsewhere.
 5 
 6 from django.contrib.auth import views
 7 from django.urls import path
 8 
 9 urlpatterns = [
10   path('login/', views.LoginView.as_view(), name='login'),
11   path('logout/', views.LogoutView.as_view(), name='logout'),
12 
13   path('password_change/', views.PasswordChangeView.as_view(), name='password_change'),
14   path('password_change/done/', views.PasswordChangeDoneView.as_view(), name='password_change_done'),
15 
16   path('password_reset/', views.PasswordResetView.as_view(), name='password_reset'),
17   path('password_reset/done/', views.PasswordResetDoneView.as_view(), name='password_reset_done'),
18   path('reset/<uidb64>/<token>/', views.PasswordResetConfirmView.as_view(), name='password_reset_confirm'),
19   path('reset/done/', views.PasswordResetCompleteView.as_view(), name='password_reset_complete'),
20 ]
原文地址:https://www.cnblogs.com/xiaolee-tech/p/12104994.html