# Python-final-project **Repository Path**: forevercan/python-final-project ## Basic Information - **Project Name**: Python-final-project - **Description**: No description available - **Primary Language**: HTML - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-01-22 - **Last Updated**: 2021-01-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Python期末项目 作者:陈灿 --- # 项目名称 ## “一天一项目,天亮就头秃”——三个小功能的服务系统 > [一天一项目,天亮就头秃](http://abacan.pythonanywhere.com/entry) ### 项目意义 本项目通过Flask、远程图像分析API以及高德天气API和步行规划API,将三张不同的API功能集成到项目的中心,意在解决三个小功能:查询广州天气、图像分析以及简单的步行规划。 - 广州当地实时天气 - 通过图片链接快速分析图片 - 通过输入起点地址以及终点地址进行简单的步行路径规划 ![基础流程图](https://gitee.com/forevercan/python-final-project/raw/master/images/%E5%9F%BA%E6%9C%AC%E6%B5%81%E7%A8%8B%E5%9B%BE.png) ### 问题表述 本Python项目集成了天气、图像和地图三个不相关的功能。可以帮助用户快速查询广州当地的实时天气情况,通过图片链接分析网络上的图像信息,输入起点地址以及终点地址进行简单的步行路径规划。 ### 解决方案 #### 整体项目规划 在进行本次的项目规划时,通过架设多个页面来实现多个功能的服务网站。首先就得通过与MYSQL数据库的链接建立注册系统,使其能够以默认账号密码登录的同时,还能以注册的信息进行登录服务系统。 | 步骤 | 步骤描述 | Python基础知识点 | | --- | --- | --- | | 第一步 | 通过Flask架构网站,呈现网站页面和实现网站功能 | Flask的架设和函数的调用 | | 第二步 | 调用高德API和azure API | API的调用 | | 第三步 | 通过MySQL数据库进行对注册和登陆信息的录入和读取 | MySQL数据库的调用 | | 第四步 | 对调用出的API所返回的参数进行选择和呈现 | 列表和字典取值 | | 第五步 | 修改样式,优化网站 | HTML、CSS | | 第六步 | 实现日志的读取和页面呈现 | 日志 | | 第七步 | 进行云端部署 | Pythonanywhere | #### 编程功能的基本描述 ##### (一)**Flask**的架设:项目的第一步是架设网站的基本框架,也就是网站的基础页面。通过的Python的函数进行各个页面的跳转。 - 在之前的Python学习中,老师手把手的Flask框架架设在这时候起了明显的作用。在项目的架设中,Flask方面的知识基本足够项目的完成。 ##### (二)**API**的调用:在实现三个小功能的正常运行,API的功能调用尤为重要。因为网站的功能性基本由API完成。 - 由于有一门专门讲解API的课程,所以在API的调用以及功能的衔接上,显得相辅相成。甚至可以用以往的作业直接进行合并。 ##### (三)**MYSQL数据库**的链接:为了完成注册以及登录的运转,与数据库的连接显得格外重要。 - 在MYSQl数据库的连接中,碰到最大的问题倒不是连接代码以及注册添加函数上的问题,而是数据库延迟的问题。因为延迟的问题导致项目在注册上进展缓慢。 ##### (四)**API返回参数的**赋值:API的功能与Flask的连接,关键在于各个参数的赋值以及参数的呈现。 - 在刚开始进行赋值以及呈现上,会出现参数繁多,眼花缭乱的情况。但经过一段时间的摸索过后,会发现基本都是同样的套路。 ##### (五)**CSS样式**的渲染:架设完简单的网站框架后,接下来要做的就是对页面的渲染,也就是进行CSS样式的添加。 - 如果每一个页面都要进行同样的样式添加的话,那么会变得极其繁琐,我们可以写一个style.css 的基本样式对每一个页面进行渲染,之后的每一个页面需要额外的样式,在进行额外的补充。 ##### (六)**日志**系统:将整个网站的数据调用记录进日志以及通过浏览日志表格的形式给呈现在网站中,具备独立的后台日志管理文件。以便对后台的监控。 - 大部分的知识在之前的Python作业上已有使用。 ##### (七)**Pythonanywhere**的部署:通过Pyhtonanywhere的部署,可以使你架设的网站呈现给任何人。 - 最小的困难在于全英网站,好在有网页翻译,但翻译完还是第一步。只能说是巨TM难。首先是在云端安装模块上,就一直出现错误,但在麦锋源同学的指导下,知道在云端的命令需要以“pip install XXX --user”的格式才能正常安装。原本以为安装完便可以完成部署,谁知道安装完的模块,在python3环境下,就是显示没有安装。逛了一大圈网页后,发现用python3环境下的命令才可以解决。最后是“python3 -m pip install pymysql --user”这一行命令才让我革命成功。 #### 云端项目部署的基本描述 ![页面流程图](https://gitee.com/forevercan/python-final-project/raw/master/images/%E9%93%BE%E6%8E%A5%E6%B5%81%E7%A8%8B%E5%9B%BE.png) ##### 云端功能与部署心得 - 云端功能:通过直接在云端上传或修改文件,实现在不同的设备上可以快捷简单的运行部署好的python项目,而不需要传送代码包才能运行。 - 部署心得:卡在第一步的其实是Pythonanywhere账号的申请上,因为需要验证申请人不是机器人,官方才能发放你的账户。首页需要在知晓验证真人的页面往后退一个页面,在反馈的位置输入证明你是真人的信息。由于是外文网站,因此我输入的是“I am a real person”,然后填写你的邮箱。官方会在一段时间后对你进行邮箱验证。还有就是,在我的本地.sql文件中不知道为什么会出现与其他同学不同的错误,借鉴了各位大佬的博客后,通过修改代码才得以解决。最后就是需要对云端命令格外熟悉,不然你会发现连模块都安装不了,“ --user”后缀很重要。如果在安装完模块后,python3环境下找不到模块,强烈建议这一行代码“python3 -m pip install XXX --user”! ### 学习/实践心得总结及感谢 #### 心得总结 在一个完整的Python项目开发中,最难的其实是在一开始的架设思路上。因为平常所学的代码知识完全不足,所以经常会出现,这一步骤我会的比较多,可以先完成这一步骤。可一旦这么下来,你的项目思路后缺少一个完整性,没有连贯性以及逻辑性。而这恰恰是撰写代码的大忌,很容易拆东墙补西墙。因此,有一个完整的项目流程尤为重要。而在后面的代码量严重不足时,所能做的就是百度搜索某一功能应当如何实现。大量的博客只要你肯耐得住性子慢慢查看一边实践,大部分都是可以解决的。实在解决不了,那么只能换一思路,重新实践。总之就是会遇到一大堆你完全没想到的困难,特别是同样的代码别人可以解决你不可以,同样的操作别人运行正常你运行错误,同样的安装别人可以你需要多走一步。原本简简单单的步骤常常因为其他突然窜出来的错误给打断,非得多让你熬几天夜掉几根头发才能解决。但是,好在有许许多多的程序员,会分享自己的心得以及解决方式,在无形之中给予你帮助,真的十分感谢。 #### 感谢 - 感谢高德API提供的Web服务 > [天气查询](https://lbs.amap.com/api/webservice/guide/api/weatherinfo) > [步行规划](https://lbs.amap.com/api/webservice/guide/api/direction) - 感谢Azure API提供的服务 > [远程图像分析](https://dev.cognitive.azure.cn/docs/services/56f91f2d778daf23d8ec6739/operations/56f91f2e778daf14a499e1fa) - 感谢Pythonanywhere提供的免费云端部署服务 > [Pythonanywhere](https://pythonanywhere.com/) - 感谢CSDN技术社区中各位博客的技术支持 > [pythonanywhere 部署 Python web项目](https://blog.csdn.net/qq_15260769/article/details/83182185) > [PythonAnyWhere免费部署python类网站](https://blog.csdn.net/qq_18809079/article/details/78768985) > [Flask框架报错 ValueError: urls must start with a leading slash](https://blog.csdn.net/qq_37189082/article/details/99630757) > [django html模板继承 {%block 标记名} {%endblock%}](https://blog.csdn.net/weixin_33910434/article/details/93458368) > [Python 技术篇-引用全局变量提示:local variable referenced before assignment. 问题解决办法](https://blog.csdn.net/qq_38161040/article/details/87918349) > [Python连接MySQL并使用fetchall()方法过滤特殊字符](https://blog.csdn.net/haoxun04/article/details/104242002) > [pymysql cursor.fetchall() 获取不到数据的问题](https://www.cnblogs.com/insane-Mr-Li/archive/2004/01/13/12967121.html) > [python从网上获取数据失败_解决pymysql cursor.fetchall() 获取不到数据的问题](https://blog.csdn.net/weixin_39614146/article/details/110548274) > [Python不创建日志文件](https://www.jb51.cc/python/185762.html) > [python 实现创建文件夹和创建日志文件的方法](https://www.jb51.net/article/164755.htm) > [python`with open`不会创建或更新.log文件](https://www.pythonheidong.com/blog/article/679086/219054c9761b1d276f67/) > [python 使用 with open() as 读写文件](https://blog.csdn.net/xrinosvip/article/details/82019844) > [python3 安装成功后,引入pymysql出错,No module named 'pymysql'](https://segmentfault.com/q/1010000012831919) > [mysql导入报错 Err 1273 - Unknown collation: 'utf8mb4_0900_ai_ci'](https://blog.csdn.net/westworld2017163com/article/details/83150628) > [MySql数据库导入sql错误 Unknown collation: 'utf8mb4_0900_ai_ci'](https://www.cnblogs.com/smiledragon/p/12357454.html) - 感谢Bootstrap网站的技术支持 > [Bootstrap](https://www.bootcss.com/) - 感谢“会议桌”的制图支持 > [会议桌](https://app.huiyizhuo.com/) - 感谢菜鸟教程以及W3C提供的技术支持 > [菜鸟教程](https://www.runoob.com/) > [W3school](https://www.w3school.com.cn/) - 感谢网新专业各位同学的帮助 > [高智浩](https://gitee.com/gaogaolo) > [朱迪伦](https://gitee.com/ZhuDilun) > [麦锋源](https://github.com/Maifengyuan)