zoukankan      html  css  js  c++  java
  • 学习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 ]
  • 相关阅读:
    点击退出 防止回退
    AngularJS select中ngOptions用法详解
    git hub
    .ashx datatable转excel
    写日志 log 到文件夹
    easyui layout 布局title
    easyui tree 折叠节点
    转json using指令
    Qt QWindow转QWidget
    CEF 重写弹窗事件
  • 原文地址:https://www.cnblogs.com/xiaolee-tech/p/12104994.html
Copyright © 2011-2022 走看看