# python的期末项目 **Repository Path**: wu_xiao_jing/final-project-of-python ## Basic Information - **Project Name**: python的期末项目 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-01-23 - **Last Updated**: 2021-01-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Python项目技术文档 * 同学如果没办法登录网站,可以登录我的pythonanywhere,账号:lovezzandxy,密码:STlpy19491001@,点击reload,刷新一下就可以了,辛苦同学了! ## 一.项目名称 * [Path planning](http://lovezzandxy.pythonanywhere.com/) ### (一)项目描述 * 这是一个可以在系统中选择“**骑行路径、驾车路径、步行路径、天气查询**”四个功能,然后输入起点及终点,**系统自动根据起点及终点以及路径策略设置,为用户量身设计出行方案**。同时可结合实时交通,帮助用户绕开拥堵路段,提供更贴心、更人性化的出行体验,提升客户使用便利;或者输入想要查询的城市,然后就会出现该城市的天气预报。 #### 网站基本功能结构图 ![功能结构图](https://gitee.com/wu_xiao_jing/final-project-of-python/raw/master/picture/%E5%8A%9F%E8%83%BD%E7%BB%93%E6%9E%84%E5%9B%BE.png) ### (二)价值主张宣言 * 时代在迅速发展,众所周知在广州最让上班族头条的就是上下班的高峰期,随着经济实力的不断提升,越来越多家庭拥有了汽车,而他们上班的基本交通工具就是汽车,但是在繁忙的上班高峰期和下班高峰期就会经常会有车辆拥挤的状况出现,而出现这样另人头疼的问题要**怎么处理才可以有效解决上班高峰期汽车阻塞的问题呢?** * 所以根据用户这一痛点及需求,我们建立了[路径规划](https://lbs.amap.com/api/webservice/guide/api/direction)、[天气查询](https://lbs.amap.com/api/webservice/guide/api/weatherinfo)查询 的flask web网站,调用了[高德API](https://lbs.amap.com/)里的“路径规划”功能,用户只需输入“起点”及“终点”就可以结合实时交通,自动规划出较为不拥挤的车况,**帮助用户绕开拥堵路段,提供更贴心,更人性化的出行体验**;并且帮助用户查询终点的天气,做好出行准备。 ### (二)核心价值 * 该网站的核心加值就是根据用户上下班总会遇上高峰期这一痛点,通过对高德api的“路径规划”及“天气查询”两项功能的调用,为用户提供路径规划和天气查询两项服务,尽可能的为用户提供便利。 ## 二.问题描述 ### (一)用户痛点 * 随着人们经济实力的不断提升,家家户户都有经济实力购买小汽车,即使有车后但依旧难以避免上下班高峰期的问题,因此许多用户都希望可以有效解决上下班高峰期的问题,可以通过查看各个路段车辆是否堵塞来确定走哪一条路线。 ### (二)用户问题描述 * 随着科学技术的发展,上下班高峰期车流阻塞成为了必不可免的问题,不少用户希望可以通过观察实时人流车辆的数量来进行路径规划。 * 为了解决用户需求,使用[“路径规划API”](https://lbs.amap.com/getting-started/path)加值,结合实时路况,在多端为用户提供准确的路线规划能力。 * 另外除了路径规划这一项功能,还有天气查询的辅助功能,可以查询某个地点的天气,以便用户可以查询终点的天气做好出行的准备。 用户|使用场景|用户痛点|用户需求 ---- | ---- | ---- | ---- 喜欢旅行的张先生夫妇|常常喜欢在周末空闲的日子带上家人来一次简单的旅行|担心在出行的时候偶遇突发天气状况|想提前知晓另一个城市的天气状况,以便做好出行准备。 身为上班族的小静|上班下班开车常遇堵车高峰期|害怕上班高峰期会导致自己迟到|想要避开车流量多的路况,行驶车流量不多的地方。 ### (三)用户画像 ![画像1](https://gitee.com/wu_xiao_jing/final-project-of-python/raw/master/picture/%E7%94%A8%E6%88%B7%E7%94%BB%E5%83%8F3.jpg) ### (四)用户体验旅程地图 ![旅程地图](https://gitee.com/wu_xiao_jing/final-project-of-python/raw/master/picture/%E7%94%A8%E6%88%B7%E6%97%85%E7%A8%8B%E5%9C%B0%E5%9B%BE%E5%88%86%E6%9E%90.jpg) ## 二、解决方案 ### (一)项目规划与知识点 * 本网站的主要页面及功能有登录与注册系统,地理位置经纬度转换、骑行、驾车、步行路径规划,天气查询等功能,并使用统一样式模板及HTMl、CSS相关知识点来完成。 ![知识图谱](https://gitee.com/wu_xiao_jing/final-project-of-python/raw/master/picture/python%E8%A7%A3%E5%86%B3%E6%96%B9%E6%A1%88%E7%9F%A5%E8%AF%86%E5%9B%BE%E8%B0%B1.jpg) ### (二)编程功能的基本描述 * **登录页面** - [if语句判断](https://www.runoob.com/python/python-if-statement.html),用于判断用户输入的账号和密码是否正确,若不正确则无法进入登录页面。 ``` @app.route('/success.html',methods=['GET','POST']) def check_in(): while True: if request.method == 'POST': #判断是否post请求 res = check_login(request.form['tel'], request.form['password']) #使用输入的用户名和密码取数据查找是否有一致的 if res: session['username'] = request.form['tel'] #注册成功后则保存用户名 session['password'] = request.form['password'] session['name'] = res return render_template('pic.html',name=res) else: return render_template('no_password.html') ``` - [http请求](https://www.runoob.com/http/http-methods.html),通过http请求链接网址,用于数据传递 ``` @app.route('/search.html',methods=['GET','POST']) ``` - [数据库](https://www.runoob.com/php/php-mysql-prepared-statements.html),用于储存用户的账号信息和使用账号信息 ``` conn = connect(host='1358294575.mysql.pythonanywhere-services.com', user='1358294575', password='API123456', port=3306, database="1358294575$apidemo" ) #连接数据库 ``` ``` def regist_user(tel,name,password): cs1 = conn.cursor() sql="select * from user where tel ='{}';".format(tel) #根据号码组装sql try: c = cs1.execute(sql) #执行sql 查询账号是否已经被注册 print(sql) ``` - [Flask模块](https://blog.csdn.net/u011146423/article/details/83383055) ``` from flask import Flask,render_template,request,session,url_for,redirect,send_from_directory from db import * from get_api import * from pymysql import connect ``` * **功能页面** - [路径规划](https://lbs.amap.com/api/webservice/guide/api/direction),根据目的地、出发地以及路径策略设置,为用户量身设计出行方案。同时可结合实时交通,帮助用户绕开拥堵路段,提供更贴心、更人性化的出行体验。 - [天气查询](https://lbs.amap.com/api/webservice/guide/api/weatherinfo),根据用户输入的adcode,查询目标区域当前/未来的天气情况。 - [地理编码/逆地理编码](https://lbs.amap.com/api/webservice/guide/api/georegeo),将详细的结构化地址转换为高德经纬度坐标。 - **路径规划** ``` def getbicycle(): if request.method == 'POST': #判断是否为post try: if session['username']: res="起点和终点输入有误,无法查询出结果 " #初始化变量 if request.form['origin'] and request.form['destination']: #判断用户是否有输入起点和终点 origin = get_geo(request.form['origin']) #调用高德api获取地点经纬度 destination =get_geo(request.form['destination'])##调用高德api获取终点经纬度 if origin != 'null' and destination != 'null': #判断经纬度是否获取成功 res = bicycling(origin,destination) ##调用高德api根据经纬度获取路线 search_location = "起点:{}-终点:{}".format(request.form['origin'],request.form['destination']) #拼接搜索内容 insert_record(session['username'],str('骑车路径'),str(search_location)) return render_template('bicycle.html', res=res) return render_template('bicycle.html',res =res) except Exception as a: return redirect(url_for('login')) ``` ``` def getwalk(): if request.method == 'POST': try: if session['username']: res="起点和终点输入有误,无法查询出结果 " if request.form['origin'] and request.form['destination']: #判断用户是否有输入起点和终点 origin = get_geo(request.form['origin']) #获取地点经纬度 destination =get_geo(request.form['destination'])#获取终点经纬度 if origin != 'null' and destination != 'null': #判断经纬度是否获取成功 res = cheack_walk(origin,destination) #获取路线 search_location = "起点:{}-终点:{}".format(request.form['origin'], request.form['destination']) #连接搜索内容 insert_record(session['username'], str('步行路径'), str(search_location)) #把操作记录存到数据库 方便录入日志 return render_template('walk.html', res=res) return render_template('walk.html',res =res) ``` ``` def getdriver(): if request.method == 'POST': try: if session['username']: res="起点和终点输入有误,无法查询结果 " if request.form['origin'] and request.form['destination']: #判断用户是否有输入起点和终点 origin = get_geo(request.form['origin']) #获取地点经纬度 destination =get_geo(request.form['destination'])#获取终点经纬度 if origin != 'null' and destination != 'null': #判断经纬度是否获取成功 res = driving(origin,destination) #获取路线 search_location = "起点:{}-终点:{}".format(request.form['origin'], request.form['destination']) #连接搜索记录 insert_record(session['username'], str('驾车路径'), str(search_location)) #把操作记录存到数据库 方便录入日志 return render_template('driver.html', res=res) return render_template('driver.html',res =res) ``` - **天气查询** ``` def getcloud(): if request.method == 'POST': try: if session['username']: res="起点和终点输入有误,无法查询出结果 " if request.form['city'] : #判断用户是否有输入城市 city = request.form['city'] res = weather(city) #查询城市天气 if city != 'null': #判断经纬度是否获取成功 insert_record(session['username'], str('天气'), str(city)) #入数据库 方便记录日志 return render_template('cloud.html', res=res) return render_template('cloud.html',res =res) ``` ## 三. 云端项目部署的基本描述 ### (一)页面链接与页面功能介绍 * 由于pythonanywhere数据库问题,未登陆情况下,无法直接进入功能页面,具体页面请进入[pythonanywhere网址](http://1358294575.pythonanywhere.com/getcloud)查看。 #### **网站基本内容展示** ##### 网站注册与登录页 ![注册](https://gitee.com/wu_xiao_jing/final-project-of-python/raw/master/picture/%E7%99%BB%E5%BD%95%E9%A1%B5%20(2).png) ##### 网站功能页 ![功能](https://gitee.com/wu_xiao_jing/final-project-of-python/raw/master/picture/%E5%8A%9F%E8%83%BD%E9%A1%B5.png) * **有效功能页面数量共13个** ### (二)云端功能 注册与登录、路径规划与天气查询、账号信息储存(数据库) ### (三)部署心得 在项目部署过程中,出现了以下问题: * 虚拟环境部署错误,无法正确部署项目环境,以及相关代码更改错误,在[链接](https://www.cnblogs.com/gupanpan/p/12310494.html)教程帮助下进行部署成功。 * 日志系统无法正常运行:在张渚同学的帮助下成功进行日志系统。 在项目制作过程中,遇到以下问题: * 无法正确连接网页:通过[链接](https://www.cnblogs.com/dancesir/p/8084394.html)教程成功进行网页跳转。 * 无法使用正确导入网页格式:通过[bootstrap](https://v3.bootcss.com/getting-started/)进行网页架构 --- ## 四、总结/学习心得与感谢 * 在本次python项目的制作中遇到了很多难点和困难,对于并不是很懂代码的我来说这是一个极大的挑战,但是还好在各个网站不同教程的帮助下,总算是完成了该网站的代码的编写及md文档的撰写,在该项目的学习过程中,我知道了仅靠自身的一点儿代码含量是不够的,我们要依靠其他网站给我们提供的便利方式,套用相关网站模板,来完成我们的项目内容攥写。 * 在写python语法时,感谢[菜鸟python](https://www.runoob.com/python/python-tutorial.html)提供的代码示例以及讲解。 * 在使用pythonanywhere进行python flask部署中,感谢[简书](https://www.jianshu.com/p/5d120cfd386e)的简单教学过程,让我可以进行项目部署。 * 在使用mysql数据库连接项目中,感谢[知乎](https://zhuanlan.zhihu.com/p/79021906)中所书写的文档。 * 在此次项目中,我也非常感谢本专业同学对我的帮助: * 感谢张渚同学为我提供了代码的帮助,以及[朱迪伦](https://gitee.com/ZhuDilun/tagto-smart-picture-social-web-app-with-flask/blob/master/README.md)所提供的文档撰写帮助。 *** * 有效外部url链接:21个