# Python_Flask_zgjm **Repository Path**: Elaine111/Python_Flask_zgjm ## Basic Information - **Project Name**: Python_Flask_zgjm - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2021-01-24 - **Last Updated**: 2021-01-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Python期末项目技术文档 ## MVP加/价值主张宣言 ### 项目名称 [周公解梦](http://119.29.138.184/)本项目主要通过登录系统,周公解梦查询,日志系统功能,并配合 Bootstrap 的统一样式模版及 HTML 、CSS 相关知识、调用api、运用python语言搭建的flask web项目。梦是窥探内心的一面隐秘之镜,是另一种虚幻却真实的人生体验,在此可输入关键词点击查询梦的解析 ### 问题表述 价值主张画布 ![价值主张画布](https://images.gitee.com/uploads/images/2021/0124/232003_0e2fd11c_2229631.png "py1.png") ## 二、编程思路、方法及流程 ### 解决方案总 1. Flask Web项目总体展示-[周公解梦](http://119.29.138.184/) 2. [Flask Web项目代码](https://gitee.com/Elaine111/Python_Flask_zgjm/tree/main/%E6%BA%90%E6%96%87%E4%BB%B6)思路、代码成果总体展示、python语言基础课程中知识点总体成果展示 * 本项目主要通过登录系统,周公解梦查询,日志系统功能,并配合 Bootstrap 的统一样式模版及 HTML 、CSS 相关知识、调用api、运用python语言搭建的flask web项目 ![代码思路](https://images.gitee.com/uploads/images/2021/0125/012740_3750f437_2229631.png "py2.png") ### 解决方案细 本项目主体功能有注册与登陆系统、周公解梦系统、日志系统。涉及: - [HTML 表单](https://www.runoob.com/html/html-forms.html),让用户选择数据进行post请求 ```html

温馨提示:“类”字不用输哦!

一键"查找”,周公为你解答疑惑":

``` - [HTTP 请求](https://www.runoob.com/http/http-methods.html),用于数据的传递 ```python @app.route('/register', methods=['GET', 'POST']) ``` ```html
``` - [Flask 第三方模块](https://blog.csdn.net/bbwangj/article/details/104646932)的使用 ```python from flask import Flask, render_template, request, escape,flash import json, urllib from urllib import parse ``` - [条件判断语句](https://www.runoob.com/python/python-if-statement.html),对比用户输入的信息和数据库里已经储存的信息或判断用户的登陆状态 ```python @app.route('/login',methods =['POST']) def login(): if request.method == 'POST': username = request.form['username'] password = request.form['password'] if not username: flash("username empty") return render_template('login.html') if not password: flash('password empty') return render_template('login.html') account =[]; with open('user.txt','r') as r: data = r.readlines() if not data: flash('user empty') return render_template('register.html') print(account) for i in data: account.append(i.strip('\n').strip('\r\n')) flag =False if not account: flash('user empty') return render_template('register.html') for i in account: splitData= i.split(':') print(splitData) print(splitData[0]) print('username') print(username) if splitData: if username == splitData[0] and password ==splitData[1]: print('xxx') flag=True break print(flag) print('flag') if not flag: flash('username or password error') return render_template('login.html') return render_template('lists.html') ``` - [for 循环语句](https://www.runoob.com/python/python-for-loop.html),提取数据库里的图文数据并在网页中展示 ```html {% for row_title in the_row_titles %} {% endfor %} {% for log_row in the_data %} {% endfor %}
{{row_title}}
{{log_row.id}} {{log_row.title}} {{log_row.des}}
``` 调用周公解梦api ```python def request1(appkey, m="GET"): url = "http://v.juhe.cn/dream/category" params = { "key": appkey, # 应用APPKEY(应用详细页查询) "fid": "", # 所属分类,默认全部,0:一级分类 } params = parse.urlencode(params) if m == "GET": f = request.urlopen("%s?%s" % (url, params)) else: f = request.parse.urlopen(url, params) content = f.read().decode('utf-8') res = json.loads(content) if res: error_code = res["error_code"] if error_code == 0: # 成功请求 return res["result"] else: return None else: return None # 解梦查询 def request2(appkey,keyword, m="GET"): url = " http://v.juhe.cn/dream/query" params = { "key": appkey, # 应用APPKEY(应用详细页查询) "q": keyword, # 黄金梦境关键字,如:黄金 需要utf8 urlencode "cid": "", # 指定分类,默认全部 "full": "", # 是否显示详细信息,1:是 0:否,默认0 } params = parse.urlencode(params) if m == "GET": f = request.urlopen("%s?%s" % (url, params)) else: f = request.urlopen(url, params) content = f.read().decode('utf-8') res = json.loads(content) print(res) if res: error_code = res["error_code"] if error_code == 0: # 成功请求 return res["result"] else: return None else: return None # 根据ID查询解梦信息 def request3(appkey,ID ,m="GET"): url = "http://v.juhe.cn/dream/queryid" params = { "key": appkey, # 应用APPKEY(应用详细页查询) "id": ID, # 解梦ID } params = parse.urlencode(params) if m == "GET": f = request.urlopen("%s?%s" % (url, params)) else: f = request.urlopen(url, params) content = f.read().decode('utf-8') res = json.loads(content) if res: error_code = res["error_code"] if error_code == 0: # 成功请求 return res["result"] else: return None else: return None ``` 由于代码较多,后期需要对项目结构进行优化,对代码进行拆分与优化。涉及: - 自定义[模块](https://www.runoob.com/python/python-modules.html)的使用 ```python from zhougong import request1,request2,request3 from vsearch import search4letters ``` - 日志功能的函数使用 ```python def search4vowels(phrase: str) -> set: """Return any vowels found in a supplied phrase.""" vowels = set('aeiou') return vowels.intersection(set(phrase)) def search4letters(phrase: str, letters: str='aeiou') -> set: """Return a set of the 'letters' found in 'phrase'.""" return set(letters).intersection(set(phrase)) def log_request(req: 'flask_request', res: str) -> None: """Log details of the web request and the results.""" with open('vsearch.log', 'a') as log: print(req.form, req.remote_addr, req.user_agent, res, file=log, sep='|') ``` 5. Flask Web项目部署至[Pythonanywhere](http://totoicy.pythonanywhere.com/viewlog) 6. Flask Web项目具有完整的[日志记录系统](http://119.29.138.184/showlog)且连接独立数据库 7. Flask Web项目部署[云服务器](http://119.29.138.184/) ### 解决方案细 1. 使用[bootstrap](https://www.bootcss.com/)搭建网站统一样式模板架构网页设计 ```html ``` 2. Flask Web项目有效功能页面 - [主页](http://119.29.138.184/) - [注册页面](http://119.29.138.184/register) - [登录页面](http://119.29.138.184/login) - [功能查询页面](http://119.29.138.184/viewlog) - [日志页面](http://119.29.138.184/showlog) - [查询结果页面](http://119.29.138.184/search4) 3. 1. 使用[bootstrap](https://www.bootcss.com/)样式 ```html ``` 4. Flask Web项目[日志记录系统](http://119.29.138.184/showlog) 5. Flask Web项目页面流程图 ![流程图](https://images.gitee.com/uploads/images/2021/0125/022026_13400999_2229631.png "Untitled Diagram.png") ## 三、心得总结及感谢 ### 部署心得 在本地运行良好的项目在部署后并不能立刻良好地运行。部署初期我遇到了很多问题: 1. 云端服务器的[虚拟环境](https://www.jianshu.com/p/5d120cfd386e)没有配置、[模块未安装](https://blog.csdn.net/Simon0529/article/details/109329599); 1. 引用文件的路径使用了[相对路径而非绝对路径](https://www.w3cschool.cn/feijishu/je4c1px7.html),导致[文件不能读取或写入](https://help.pythonanywhere.com/pages/NoSuchFileOrDirectory/); 本地运行良好的项目在部署后出问题,但是时间已经不允许我在进行除错了,我马上转换了思路,使用了[云服务器进行部署](http://119.29.138.184/) ### 感谢 通过本学期的学习,我更加扎实地学习了有关python的代码知识以及应用,感谢[Python平台](https://www.python.org/),同时也学习到API到人工智能到未来可能盛行的类似于人类的智能机器人,一切都在从不可能到可能的过程发展,这一学期以来,我对技术文档及PRD文档的撰写格式有了更为深入的了解,对一个产品从设想到呈现想法的过程更加的清晰。遇到问题时查看了[菜鸟python教程3](https://www.runoob.com/python3/python3-tutorial.html)、[Flask安装使用教程](https://www.cnblogs.com/lsdb/p/10488448.html),问题得以有效解决,同时感谢[Processon](https://www.processon.com/)、[百度脑图](https://naotu.baidu.com/)、[马克飞象](https://maxiang.io/),有效利用此,写起文档更事半功倍。 - 总有效外链URL共20个