# python_final_project **Repository Path**: Daisy-X/python_final_project ## Basic Information - **Project Name**: python_final_project - **Description**: python期末项目 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 0 - **Created**: 2021-01-12 - **Last Updated**: 2025-06-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # python期末项目 ### (ps:撰写不易,参考请加以说明) 文档撰写人:陈希 撰写时间:2021-01-19 ## 项目名称 项目GO是一个可供用户筛选查看广州各地区景点及查看天气情况的一个网站。 ### 项目功能流程图: ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/python%E6%9C%9F%E6%9C%AB%E9%A1%B9%E7%9B%AE%E5%8A%9F%E8%83%BD%E6%B5%81%E7%A8%8B%E5%9B%BE.jpg) ### 价值主张: 1. 让用户知道广州各地区有些什么,并了解景点相关介绍(所在地区、简要概括景点特色) 2. 用户通过查询天气可准确了解所查询地的天气(昼夜温度、昼夜天气、风向、近四天的天气及昼夜温度变化折线图) 3. 用户输入搜索结构化地址及关键词,即可为用户展现地址周边信息(名称及相对应的地址) ### 项目加值: 1. 利用pyecharts绘制双折线图图表,将信息可视化,为用户展现更加清晰的数据信息(近四天的昼夜温度变化) 2. 利用地理编码API、高德天气API、周边搜索API ### 运用相关知识: 利用python基础语言、flask web以及HTML搭建网站框架,高德天气API获取天气情况,MySQL存储数据,实现前端后端交互。 ### 项目各界面截图: **进入页:** ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E8%BF%9B%E5%85%A5.jpg) **首页:** ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E9%A6%96%E9%A1%B5.jpg) **注册页:** ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E6%B3%A8%E5%86%8C%E9%A1%B5.jpg) **注册成功页:** ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E6%B3%A8%E5%86%8C%E6%88%90%E5%8A%9F%E9%A1%B5.jpg) **修改密码页:** ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E4%BF%AE%E6%94%B9%E5%AF%86%E7%A0%81%E9%A1%B5.jpg) **修改密码成功页:** ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E4%BF%AE%E6%94%B9%E5%AF%86%E7%A0%81%E6%88%90%E5%8A%9F%E9%A1%B5.jpg) **注销页:** ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E6%B3%A8%E9%94%80%E9%A1%B5.jpg) **登入页:** ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E7%99%BB%E5%85%A5%E9%A1%B5.jpg) **登入成功进入景点筛选页:** ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E7%AD%9B%E9%80%89%E9%A1%B5.jpg) **筛选结果页:** ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E7%AD%9B%E9%80%89%E7%BB%93%E6%9E%9C%E9%A1%B5.jpg) **天气查询页:** ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E5%A4%A9%E6%B0%94%E6%9F%A5%E8%AF%A2%E9%A1%B5.jpg) **天气查询结果页:** ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E5%A4%A9%E6%B0%94%E6%9F%A5%E8%AF%A2%E7%BB%93%E6%9E%9C%E9%A1%B5.jpg) **近四天昼夜温度变化折线图:** ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E8%BF%91%E5%9B%9B%E6%97%A5%E6%98%BC%E5%A4%9C%E6%B0%94%E6%B8%A9%E5%8F%98%E5%8C%96.jpg) **周边搜索页:** ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E5%91%A8%E8%BE%B9%E6%90%9C%E7%B4%A2%E9%A1%B5.jpg) **周边搜索结果页:** ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E5%91%A8%E8%BE%B9%E6%90%9C%E7%B4%A2%E7%BB%93%E6%9E%9C%E9%A1%B5.jpg) ## 问题表述 ### 项目基本功能: 实现用户注册、注销、修改密码基本操作 ### 项目核心功能: 1. 让用户知道广州各地区有些什么,并了解景点相关介绍(所在地区、简要概括景点特色) 2. 用户通过查询天气可准确了解所查询地的天气(昼夜温度、昼夜天气) 3. 周边搜索功能:用户输入搜索结构化地址及关键词,即可为用户展现地址周边信息 ### 用户痛点及解决对策: | 用户痛点 | 解决对策 | | :----: | :----: | | 不知道广州地区有些什么景点 | 网站爬虫/搜索获取更多的景点信息,整理放入数据库 | | 不知道当地的天气情况导致出行准备不充足;选择出行旅游玩乐,但因天气不好而不愉快 | 对比不同天气API,为用户推算出最准确的天气情况 | | 不知道周边有什么服务,为此纠结花费很多时间寻找 | 利用高德周边搜索API,为用户展现准确地周边信息(名称及相对应的地址)| ### 用户画像: ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E7%94%A8%E6%88%B7%E7%94%BB%E5%83%8F.jpg) ### 价值主张画布: ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E4%BB%B7%E5%80%BC%E4%B8%BB%E5%BC%A0%E7%94%BB%E5%B8%83.jpg) ## 解决方案表述 ### 项目整体规划: 1. 总结本学期学过的API功能,根据方案可行性进行大致构思项目所需界面及主要功能 2. 深入学习python课堂上所讲述的flask web开发基础界面的模板,了解前端后端交互逻辑(数据库的使用) 3. 在jupyter notebook上先调试好API功能应用及主功能代码,成功后再开始做HTML界面 4. 美化界面 5. 云端部署项目 ### 项目的迭代过程: | 过程内容 | 所用知识点 | | :----: | :----: | | 首页及登入功能界面的实现 | 利用数据库存放用户信息 | | 登入成功的判断过程、注册功能界面的实现 | 利用python中if语句及数据库的相关知识点 | | 筛选功能界面的实现 | 利用数据库相关知识点 | | API功能的加入 | jupyter notebook的使用,阅读相关API文档,python基础语言嵌套字典的取值、列表元素的添加 | | HTML界面的美化 | bootstrap样式模板、相关CSS样式 | | 项目的部署 | pythonanywhere云端部署 | ### 所用到的python基础知识点: 1. 函数的封装,模块的调用 2. if判断语句与for循环语句的使用 3. 嵌套字典的取值 4. 列表元素的添加 ## 编程功能的基本描述 ### 传参和界面跳转逻辑是整个项目的重难点 | 过程内容 | 相关知识点 | 学习时间(项目占比)| | :----: | :----: | :----: | | 相关API的调用 | API文档阅读,在jupyter notebook上尝试代码;python基础语言:嵌套字典的取值、列表元素的添加 | 学习时间约15天,项目占比15% | | flask web开发 | python基础语言 | 学习时间约30天,项目占比40% | | 注册、注销、修改密码、筛选功能界面的实现 | MySQL数据库的应用;python基础语言:if与for语句 | 学习时间约为6天,项目占比25% | | HTML界面的美化 | bootstrap样式模板、相关CSS样式 | 学习时间约为10天,项目占比15% | | 日志系统的实现 | python基础语言:文件的读取,字典列表间的取值与转化 | 学习时间约为5天,项目占比3% | | 项目的部署 | pythonanywhere云端部署 | 学习时间约为1天,项目占比2% | 1. 准备工作,导入所需模块 ``` from flask import Flask, render_template, request,jsonify,escape from panduan import panduan_login # 导入模块,调用自己所写的判断登入函数 from pymysql import connect # 导入模块,调用连接pymysql函数 from geo import geocode,integrated,weather,around # 导入模块,调用API相关函数 import pyecharts.options as opts # 导入模块,调用pyecharts绘图函数 from pyecharts.charts import Line ``` 2. 最基本的flask框架 ``` from flask import Flask app = Flask(__name__) @app.route('/') def hello_world(): return 'Hello World!' if __name__ == '__main__': app.run() ``` ``` # 获取用户在页面上输入的信息,以username和password为例 username = request.form["inputUsername"] password = request.form["inputPassword"] ``` ``` # 连接数据库,对数据库里的数据进行一些操作用于注册、登入、修改密码、注销(这里只是举例语法,不保证运行的成功与否,但逻辑如下) con = connect(host="127.0.0.1",port=3306,user="root",password="123456",db="travel") cursor6 = con.cursor() username = request.form["inputUsername"] password = request.form["inputPassword"] # 对数据库的数据操作3. 将用户输入的信息传入数据库 sql = "insert into useradmin set username='%s',password='%s'"%(username,password) # 对数据库的数据操作1. 将用户要注销的账户对应删除数据库的值 sql = "delete from useradmin where username='%s'"% (username) # 对数据库的数据操作2. 将用户修改的password更新至数据库 sql = "update useradmin set password='%s' where username='%s'"% (password,username) cursor6.execute(sql) res= cursor6.fetchall() con.commit() ``` ## 云端项目部署的基本描述 ### Pythonanywhere界面链接:(界面功能流程图请见上方项目名称 > 项目功能流程图) [进入首页](http://chenxi06.pythonanywhere.com/) [首页](http://chenxi06.pythonanywhere.com/entry?) [登入](http://chenxi06.pythonanywhere.com/login) 由于数据库传入数据会有延时,注册账号后不一定能够登入成功,若不成功可用账号chenxi,密码123456登入 [注册](http://chenxi06.pythonanywhere.com/regist) [注销](http://chenxi06.pythonanywhere.com/delect) [修改密码](http://chenxi06.pythonanywhere.com/modify1) [浏览日志](http://chenxi06.pythonanywhere.com/viewlog?) [天气搜索](http://chenxi06.pythonanywhere.com/go?) [周边搜索](http://chenxi06.pythonanywhere.com/around) ### 数据流程图 ![](https://gitee.com/Daisy-X/python_final_project/raw/master/pictures/%E6%95%B0%E6%8D%AE%E6%B5%81%E7%A8%8B%E5%9B%BE.jpg) ### 部署过程/操作: 注册pythonanywhere账号;将项目文件上传至Files中;新建数据库并导入上传的数据库;修改连接数据库的相关代码;修改WSGI configuration file中的导入主功能py文件;若没有flask、pymysql等所需模块,则须先进入控制台安装,语法:pip3 install **模块 --user;进入web,reload网站进行运行。 ### 部署心得: 上课的时候游鸽老师有一步步地耐心教我们如何操作Pythonanywhere云端部署,课后我也帮了几位同学进行项目部署,因此对部署的流程较为清晰,遇到报错不要紧张,点击web下划到Log files查看里面的错误原因网址,找到错误原因再来逐步解决。常见的错误原因有: | 错误 | 解决办法 | | :----: | :----: | | 部分模块未安装 | 进入控制台,pip3 install **模块 --user | | 数据库未导入问题 | 进入数据库控制台 > show databases;找到要导入数据的**数据库 > use **数据库; > source 要导入的数据文件路径 | 数据库连接问题(未修改用户名/地址/密码) | 进入Databases找到自己的Database host address、Username以及数据库名称,复制保存至一个文本文档里;去files把和有链接数据库的文件对应更改 | | 超过连接最大额度 | 关闭控制台 | | Unknown collation: 'utf8mb4_0900_ai_ci' | 修改数据库排序规则为utf8_unicode_ci和字符集uft8 | ## 学习/实践心得总结及感谢 ### 学习/实践心得总结: - 在本次项目的实践中,我学习到了如何完整地开发一次较简单的项目。期末项目文档的撰写我参考了往期师姐文档,更加清晰地了解了项目文档的逻辑结构,从她的文档中我收获了很多,在此向她表达衷心的感谢。 - 本次项目实践将本学期所学的专业知识最大化,综合利用了python基础语言、flask web开发、API调用以及MySQL相关知识,除此之外还与上学期所学的商业模式价值主张相结合,将所有知识点融会贯通。 - 通过本次项目开发实践,我充分认识到了平时知识积累以及提高自主学习能力的重要性,要学会独立思考、善于总结运用所学的知识;在调试代码的时候要勇于试错!!! ### 感谢: 1. 感谢数据提供/平台者: [和鲸社区——数据提供平台](https://www.kesci.com/home) [景点信息数据提供](https://www.kesci.com/mw/dataset/5f4923625c4b5d0036385e53) 2. 感谢相关API应用官网所提供的文档: [高德地理编码API文档](https://lbs.amap.com/api/webservice/guide/api/georegeo) [高德天气查询API文档](https://lbs.amap.com/api/webservice/guide/api/weatherinfo) [高德周边搜索API文档](https://lbs.amap.com/api/webservice/guide/api/search) 3. 感谢CSDN技术社区中的博客们以及相关官网所提供的技术和bug解决方案: [Python常用框架:Flask](https://zhuanlan.zhihu.com/p/43929790) [服务器出现 HTTP 400、404、500、502 错误原因及解决方法](https://www.360kuai.com/pc/991b96882728d88fc?cota=4&kuai_so=1&tj_url=so_rec&sign=360_57c3bbd1&refer_scene=so_1) [数据库相关知识点](https://www.cnblogs.com/zk-njupt/p/10741576.html) [mysql数据数据表的排序规则修改(批量修改)](https://blog.csdn.net/u012045045/article/details/109600414) [什么是数据库并发?](https://blog.csdn.net/weixin_42236404/article/details/103628332) [MySql数据库导入sql错误 Unknown collation: 'utf8mb4_0900_ai_ci'解决办法](https://www.cnblogs.com/smiledragon/p/12357454.html) [Mysql Table doesn't exist问题解决](https://blog.csdn.net/vtopqx/article/details/84891962) [Python编码规范(PEP 8)](http://c.biancheng.net/view/4184.html) [css label 居中布局_css-水平居中、垂直居中、水平垂直居中方法](https://blog.csdn.net/weixin_36027743/article/details/112370555?utm_medium=distribute.pc_relevant.none-task-blog-baidujs_baidulandingword-3&spm=1001.2101.3001.4242) [CSS position 属性](https://www.runoob.com/cssref/pr-class-position.html) [CSS align-self 属性](https://www.runoob.com/cssref/css3-pr-align-self.html) [bootstrap模板](https://v3.bootcss.com/getting-started/) [html/jsp 让背景图片铺满整个网页](https://blog.csdn.net/weixin_42153410/article/details/889722760) [div居中和div内容居中](https://blog.csdn.net/shenzixincaiji/article/details/82120936) [HTML表格美化](https://blog.csdn.net/weixin_47139649/article/details/109099704?utm_medium=distribute.pc_aggpage_search_result.none-task-blog-2~aggregatepage~first_rank_v2~rank_aggregation-3-109099704.pc_agg_rank_aggregation&utm_term=html5%E8%AE%BE%E7%BD%AE%E8%A1%A8%E6%A0%BC%E8%83%8C%E6%99%AF%E8%89%B2&spm=1000.2123.3001.4430#522__217) [HTML边距设置之padding和margin](https://blog.csdn.net/jimsonhappy/article/details/39534441) [HTML拾色器](https://www.runoob.com/tags/html-colorpicker.html) [HTML 表单和输入](https://www.runoob.com/html/html-forms.html) [Python列表](https://www.runoob.com/python3/python3-list.html) [Python错误和异常](https://www.runoob.com/python3/python3-errors-execptions.html) 4. 感谢游鸽老师的细心教学与指导以及陈航宇、高湘林、黄泽豪同学的热情帮助,真的!万分感谢!