Django入门——按图索骥《Python编程从入门到实践》第18章,记录下大体的步骤及踩过的坑

****自己作为初学者,感到出现这些坑主要是两个原因:
1.原书用的Django版本较低,现在大多装的是Django2.0,其中一些语法改变了,所以按原书编程即便一字不错照搬也会出现不少报错
2.基础薄弱,这个就不多说了。

1.安装virtualenv

书上说用 pip install virtualenv,我刚开始用的anaconda3,概念没搞清楚,从anaconda prompt上捣鼓了半天,后来发现在cmd进入终端安装。

2.建立虚拟环境

书上说“在终端切换到目录”,这个也查了半天,后来发现是找个合适地方新建一个文件夹,鼠标放到这个文件夹上,按住shift和鼠标右键,进入cmd就行了,然后python -m venv 11_env就完事了。其中11_env是环境名字,可改变。

3.激活虚拟环境

在windows中,所以用的是“11_env\Scripts\activate”其中11_env是虚拟环境名,自己取一个名就行。激活后输入提示符前会变成(11_env),加了一个括号表示激活了。

4.启动服务器

python manage.py runserver服务器启动后,倘若修改了某个文件,服务器会实时显示状况,包括报错什么的。

5.建立映射URL

参考资料:https://docs.djangoproject.com/en/3.0/topics/http/urls/

5.1命名namespace的问题

运行提示报错:Specifying a namespace in include () withou providing an app_name
以前的写法

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r"^users/", include("users.urls", namespace='aaa')),
]

`现在的写法,include中的第一个参数需要是一个二维元祖

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r"^users/", include(("users.urls", 'users'), namespace='aaa')),
]

5.2 URL中’^$'正则表达式问题

在运行服务器时console提示报错:
“WARNINGS:?: (2_0.W001) Your URL pattern ‘^index’ has a route that contains ‘(?P<’, begins with a ‘^’, or ends with a ‘$’. This was likely an oversight when migrating to django.urls.path().”

解决办法请看此原文链接:https://blog.csdn.net/SilentWu/article/details/88205831
因为从Django2.0以后,urls.py配置不同
解决方案:把url函数换成path,不适用^,$作路由
原来:

urlpatterns = [
    #主页
    path('^$', views.index,name='index'),
    
]

现在:

urlpatterns = [
    #主页
    path('', views.index,name='index'),
    
]

5.3 'topics/(?P<topic_id>\d+)/'问题(P378,第18.4.3)

在运行Django过程中,服务器提示:
“WARNINGS:?: (2_0.W001) Your URL pattern ‘^index’ has a route that contains ‘(?P<’, begins with a ‘^’, or ends with a ‘$’. This was likely an oversight when migrating to django.urls.path().”

这个问题查了好半天才解决。原来是前端动态请求路径,URLS配置使用前需要导入re_path。
原文代码(把url改为path且去掉^$):

urlpatterns = [
    #主页
    path('', views.index,name='index'),
    #显示所有的主题
    path('topics/',views.topics,name='topics'),
    #特定主题的详细页面
    path('topics/(?P<topic_id>\d+)/',views.topic,name='topic'),
]

改后的代码:

urlpatterns = [
    #主页
    path('', views.index,name='index'),
    #显示所有的主题
    path('topics/',views.topics,name='topics'),
    #特定主题的详细页面
    re_path('topics/(?P<topic_id>\d+)/',views.topic,name='topic'),
]

当然,别忘了导入re_path,不然还会报错,嘿嘿嘿。

from django.urls import path,re_path

这样就解决了。

6.建立用户账户

6.1 no module named 'django.core.urlresolvers’问题

解决方法就是:from django.urls import reverse
最近从django1.9迁移到django2.0中出现一个意外的报错,原因就是:django2.0 把原来的 django.core.urlresolvers 包 更改为了 django.urls包,所以我们需要把导入的包都修改一下就可以了。

6.2form=EntryForm(data=request.POST) invalid character in identifier问题

这个原因找到了,有一个中文字符,晕了。。。。。。。
增加一个查过的有用链接供大家参考:https://www.jianshu.com/p/d53680ccbf50

发布了8 篇原创文章 · 获赞 3 · 访问量 1941

猜你喜欢

转载自blog.csdn.net/youtaidudewamao/article/details/104378642