Python编程:从入门到实践项目3总结——Web应用程序


前言

关于实践《Python入门到实践》项目3:Web应用程序所碰到的一系列坑


提示:以下是本篇文章正文内容,下面案例可供参考

一、版本匹配问题

特别注意:各工具之间版本匹配问题是非常关键的,有时候不是你代码写得不对,而是版本之间不兼容或者写法变了的问题。对于我这种初学者和身边无人请教的人来说,版本所引起的问题常常是最耗费心思的。

《Python入门到实践》第二版,此书所用到的工具版本分别是:

 - python3.5.0 
 - django1.8.5
 - bootstrap3

书上的版本已经太过于老久了,如果不注意指定安装与书上一样的版本,在练习的过程中会频繁踩版本所导致的坑。以下列举几种情况:

Q1:topic = models.ForeignKey(Topic)
tip:TypeError: init() missing 1 required positional argument: ‘on_delete’
cause:在django2.0后,定义外键和一对一关系的时候需要加 ‘on_delete’ 选项,此参数为了避免两个表里的数据不一致问题。
resolve:topic = models.ForeignKey(Topic, on_delete=models.CASCADE)

Q2:url(r’’, include(‘learing_logs.urls’), namespace=‘learning_logs’))
tip:TypeError: url() got an unexpected keyword argument ‘namespace’
cause:在django2.0之后版本已经修改代码格式
resolve:修改以下内容

# 修改导入内容
from django.contrib import admin
from django.urls import path, include

# 修改namespace规格
path('', include(('learning_logs.urls', "learning_logs"), namespace='learning_logs')),

Q3:from django.contrib.auth.views import login
tip:ImportError: cannot import name ‘login’
cause:模块写法变化导致
resolve:from django.contrib.auth.views import LoginView

Q4:bootstrap3 {% bootstrap_form form %}
tip:cannot import name ‘BoundField’ !
cause:写法是没错的,只是版本不匹配导致的
resolve:

# 先在虚拟环境下升级下pip
(ll_env) D:\learning_log>py -m pip install --upgrade pip

# 再安装bootstrap3, 我自己用的是python3.9, 对照着改就可以
(ll_env) D:\learning_log>pip3.9.exe install django-bootstrap3

Q5:from django.core.urlresolvers import reverse
tip:ModuleNotFoundError: No module named ‘django.core.urlresolvers’
cause:django2.0 把原来的 django.core.urlresolvers 包 更改为了 django.urls
resolve:from django.urls import reverse

Q6:WARNINGS:?: (2_0.W001) Your URL pattern ‘^edit_entry/(?P<entry_id>\d+)/$’ …
cause:django2.0后urls的配置发生了改变
resolve:

 # 把url函数换成path,正则写法改变成re_path
 原先:url(r'^topics/$', views.topics, name='topics'),
 修改:re_path('^topics/$', views.topics, name='topics'),
 注意记得加上导入!! from django.urls import path, re_path 

二、部署问题

项目中把本地代码远程上传到heroku服务器,你可能会遇到以下几个问题。

Q1:在项目推送到heroku时,执行命令heroku login
tip:press any key to open up the browser to login or q to exit
resolve:把登录命令换成 heroku login -i

Q2:把修改后的仓库推送到Heroku服务器
tip:django.core.exceptions.ImproperlyConfigured: You’re using the staticfiles app without having set the STATIC_ROOT setting to a filesystem path.
cause:因为该项目最初是从一个临时目录构建的。只查找/app目录,项目将无法正常构建
resolve:

settings.py 中的if语句在书中看起来是这样的:
# Heroku settings
if os.getcwd() == '/app':
    import dj_database_url
    
修改后
# Heroku settings
cwd = os.getcwd()
if cwd == '/app' or cwd[:4] == '/tmp':
    import dj_database_url

Q3:把修改后的仓库推送到Heroku服务器
tip:## Warning - The same version of this code has already been built: …
cause:中途修改代码后没有先提交到git
resolve:

(ll_env) D:\learning_log>git commit -am "备注"
(ll_env) D:\learning_log>git status 查看下有没有毛病,没有再执行下一条命令
(ll_env) D:\learning_log>git push heroku master

Q4: (ll_env) D:\learning_log\ll_env>py manage.py runserver
tip:can’t open file ‘D:\learning_log\ll_env\manage.py’: [Errno 2] No such file or directory
cause:没有在manage.py目录下执行命令
resolve:在manage.py所在目录执行py manage.py runserver

总结

其实我遇到的问题不止这么多,但记录到的内容和能想起来的也就这么多了。作为一个初学者,身边没有大佬可以请教,因为版本问题而引起的错误,百思不得其解和查找不到方法的情况下,我只能重做。整个项目我至少重新推翻做了4次,最后一次才比较顺利完成。不过还是挺感谢众多网络平台和网友进行分享,大部分问题还是能在网上找到解决办法的。
在一次次的推翻这个项目的时候,在一个整下午都找不到解决办法的时候,心态浮躁和挫败感袭来是很正常的情况。但在一次次成功解决自己猜测导致错误的问题后,又会很兴奋。我在默默无闻地砌塔,无论这一过程需要重新推翻多少次…永不放弃。

晒一下项目最终成果记录一下
在这里插入图片描述
最后,一点小心得。

  • 如果你同我一样是新手的话,《Python入门与实践》这本书第一章到十一章确实是不错的引领进门的师傅。但如果做项目3的话,不建议在什么都不了解的情况下做,因为版本迭代造成了许多坑,对我们的学习是极其不利的。可以先到B站或者先学习下Django中文社区里的项目https://www.django.cn/course/course-2.html

  • 如果你想尝试着做项目3的话,请使用python以及django的最新版本进行学习,虽然会由此引起很多版本不匹配的问题,但大多数问题已经罗列出来了。并且也为你准备了几份参考文章,对照书上和这几篇文章进行学习,我相信应该能比较顺利。

  • 15
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值