Python编程-从入门到实践 Chapter18 第18章Django入门 映射URL 学习时的坑

书上的代码和指令是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弄混了,出现了点小问题。
以上就是我的学习心得和采坑经历,整理分享出来希望能够帮助大家 ~ ~!

猜你喜欢

转载自blog.csdn.net/weixin_40624269/article/details/81773153