书上的代码和指令是2016年的版本的,目前Django版本更新到了2.0,有很多地方成了坑,辛辛苦苦两天终于把书上所有的项目实现了,在此总结一下,为之后的学习者借鉴之用。
本人用的Win10系统,python3.6,Django2.0.1
1.安装Django
第一个坑就是它了,用pip的时候总显示pip版本过低,要先升级pip,可是pip总是升级失败,解决办法由很多,我选择的是删除特定文件(因为文件中的url地址已经废弃),删了之后再按照要求输入python -m pip install –upgrade pip即可。
#在我的 ~/.pip/pip.conf 配置文件里,index-url 使用了一个已经废弃的地址,删除文件后重新升级,一切恢复正常。
2.再Django中创建项目
书中写的命令是:
django-admin.py startproject learning_log.
正常运行的话会建立一个名为learning_log的文件夹并配置相关文件
但是我输入之后终端没有反应,上网查询资料后发现,如果使用pip安装的Django,输入的命令应该是
django-admin startproject learning_log.
如果安装的Django是从官网下载的,应该使用第一个命令吧(我没试过)
3.Django管理网站
向管理网站注册模型的时候,按照书上的代码运行,打开的网上却没有我们自己编写的Topics,不要担心,这不是你的错,把现有项目都关了再重开一次就好了。- – !
4.映射URL
这是重灾区,因为Django版本更新,不可能照搬书上的代码,对于老手来说可能没什么,但是我们这种新手就很慌了。
1)书中源代码
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.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('', include('learning_logs.urls', namespace='learning_logs')),
]
主要是url这个方法变成了path,还有就是不需要r^等标识符。
2)18.4.2 显示所有主题的页面
learning_logs/urls.py书中代码
urlpatterns = [
# Home page.
url(r'^$', views.index, name='index'),
# Show all topics.
url(r'^topics/$', views.topics, name='topics'),
# Detail page for a single topic.
url(r'^topics/(?P<topic_id>\d+)/$', views.topic, name='topic'),
]
应改为
from django.urls import path
from . import views
app_name='learning_logs'
urlpatterns = [
# 主页
path('', views.index, name='index'),
# 显示所有的主题
path('topics/', views.topics, name='topics'),
# 特定主题的详细页面
path("topics/(?P<topic_id>\d+)/", views.topic, name='topic'),
]
注意!!!这里有一个巨坑
就是app_name='learning_logs'
这一句,书上没有,但是你不写runserver的时候就会出错- -!
这个坑在下一章还会遇到,在users项目中
还要注意前面的两个导入语句。
补充:
在导入django.contrib.auth.models时 ,有一个on_delete的坑,下一张也会遇到,错误信息如下:
TypeError: init() missing 1 required positional argument: ‘on_delete’
解决办法:
在相关函数后面添加:
on_delete=models.CASCADE
更详细的教程https://www.cnblogs.com/phyger/p/8035253.html
其他的应该没什么技术上的坑了,如果再有问题,检查一下代码名是不是弄混了,我就把这一章最后的topic和topics弄混了,出现了点小问题。
以上就是我的学习心得和采坑经历,整理分享出来希望能够帮助大家 ~ ~!