感谢各位同行的无私分享,此文为整理记录。
原书中Django是1.8.4版本,新版有不少变化。
我用的是Djangon 3.0.7,python3.6.9。

1,18章2.4小节.定义模型的外键方法ForeignKey()问题
书中原码:

topic = models.ForeignKey(Topic)

应改为:

topic = models.ForeignKey(Topic,on_delete=models.CASCADE)

2,18章3.1小节.映射URL
原url()方法改为了path()方法
书中原码:

from django.conf.urls import include, url
from django.contrib import admin
urlpatterns = [
    url(r'^admin/', include(admin.site.urls)),
    url(r'', include('learning_logs.urls',     
    namespace='learning_logs')),
    ]

方法一改为:

from django.urls import include, path 
from django.contrib import admin
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('learning_logs.urls',     
    namespace='learning_logs')),
    ]

方法二:
虽然新版url默认不支持正则,但是导入re_path就可以用了。
例:

from django.urls import path,re_path
urlpatterns = [
	path('admin/', admin.site.urls),
	re_path(r'^test-(\d+)-(\d+)/', views.test),
	]

3,19章1.1小节3.视图函数 new_topic()

from django.core.urlresolvers import reverse

应改为:

from django.urls import reverse

4,19章2.2节登录页面
目录 learning_log/users/ 中,新建的urls.py 文件

from django.conf.urls import url
from django.contrib.auth.views import login
from . import views
urlpatterns  =  [
	#登录页面
	url(r'^login/$', login, {'template_name': 	'users/login.html'},
	name='login'),
	]

应该为:(包含后面章节注销、注册部分,对照#登录页面部分修改就可以。LoginView记得导入)

from django.urls import path,include
from django.contrib.auth.views import LoginView
from django.contrib.auth import logout,login,authenticate
from . import views
app_name = 'users'
LoginView.template_name = 'users/login.html'
urlpatterns = [
    #登录页面
    path('login/',LoginView.as_view(),name='login'),
    #注销
    path('logout/',views.logout_view,name='logout'),
    #注册
    path('register/',views.register,name='register'),
    ]

模块引进有部分多余,调试好再来修改。

更多推荐

自学Python编程从入门到实践Django项目三18章19章的各种坑