博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【flask学习笔记】flask与HTTP,flask与mongodb交互,用手机输入局域网ip访问flask界面
阅读量:3904 次
发布时间:2019-05-23

本文共 4889 字,大约阅读时间需要 16 分钟。

文章目录

引入(关于http)

当我们在浏览器中的地址栏中输入这个URL,然后按下Enter时,稍等片刻,浏览器会显示一个问候页面。这背后有一个程序运行着。它负责接收用户的请求,并把对应的内容返回给客户端,显示在用户的浏览器上。事实上,每一个Web应用都包含这种处理模式,即“请求-响应循环(Request-Response Cycle)”:客户端发出请求,服务器端处理请求并返回响应,

flask web的工作流程:
在这里插入图片描述
从图中可以看出,HTTP在整个流程中起到了至关重要的作用,它是客户端和服务器端之间沟通的桥梁。 当用户访问一个URL,浏览器便生成对应的HTTP请求,经由互联网发送到对应的Web服务器。Web服务器接收请求,通过WSGI将HTTP格式的请求数据转换成我们的Flask程序能够使用的Python数据。在程序中,Flask根据请求的URL执行对应的视图函数,获取返回值生成响应。响应依次经过WSGI转换生成HTTP响应,再经由Web服务器传递,最终被发出请求的客户端接收。浏览器渲染响应中包含的HTML和CSS代码,并执行JavaScript代码,最终把解析后的页面呈现在用户浏览器的窗口中。

flask项目的配置

注:windows防火墙高级配置里面可以新建规则开放端口(不过好像不设置这个也可以访问)

在这里插入图片描述
打开mongodb数据库连接:
在这里插入图片描述

mongod.exe --config mongod.cfg

在这里插入图片描述
注意,记录写在了log中,所以什么都不会输出

下面是flask目录:

在这里插入图片描述
与mongodb交互的代码:

from pymongo import MongoClientclass DataBaseManager(object):    def __init__(self):            client = MongoClient()        database = client.chapter_4        self.handler = database.people_info    def query_info(self):          info_list = list(self.handler.find({
'deleted': 0}, {
'_id': 0})) return info_list def _query_last_id(self): last_info = self.handler.find({
}, {
'_id': 0, 'id': 1}).sort('id', -1).limit(1) return last_info[0]['id'] if last_info else 0 def add_info(self, para_dict): last_id = self._query_last_id() this_id = last_id + 1 para_dict['id'] = this_id try: self.handler.insert_one(para_dict) except Exception as e: print('插入数据失败,保存信息如下:{}'.format(e)) return False return True def update_info(self, people_id, para_dict): try: y = self.handler.update_one({
'id': people_id}, {
'$set': para_dict}) print(y) except Exception as e: print('更新数据错误,报错信息如下:{}'.format(e)) return False return True def del_info(self, people_id): return self.update_info(people_id, {
'deleted': 1})if __name__ == '__main__': database_manager = DataBaseManager()

main.py代码:

import jsonfrom flask import Flask, render_template, requestfrom your_code_here.DataBaseManager import DataBaseManagerfrom util.Checker import Checkerapp = Flask(__name__)manager = DataBaseManager()checker = Checker()@app.route('/')def index():    data_list = manager.query_info()    return render_template('index.html', data_list=data_list)@app.route('/add', methods=['POST'])def add_info():    info = request.json    if not checker.check_add_fields_exists(info):        return json.dumps({
'success': False, 'reason': '字段不完整'}, ensure_ascii=False) fail_reason = checker.check_value_valid(info) if fail_reason: return json.dumps({
'success': False, 'reason': fail_reason}, ensure_ascii=False) info['deleted'] = 0 insert_result = manager.add_info(info) return json.dumps({
'success': insert_result})@app.route('/update', methods=['POST'])def update_info(): info = request.json if not checker.check_update_fields_exists(info): return json.dumps({
'success': False, 'reason': '字段不完整'}, ensure_ascii=False) people_id = checker.transfer_people_id(info['people_id']) if people_id == -1: return json.dumps({
'success': False, 'reason': 'ID必需为数字'}) dict_tobe_updated = info['updated_info'] # fail_reason = checker.check_value_valid(dict_tobe_updated) #if fail_reason: # return json.dumps({'success': False, 'reason': fail_reason}, ensure_ascii=False) update_result = manager.update_info(people_id, dict_tobe_updated) return json.dumps({
'success': update_result})@app.route('/delete/
', methods=['GET'])def delete(people_id): people_id = checker.transfer_people_id(people_id) if people_id > 0: delete_result = manager.del_info(people_id) return json.dumps({
'success': delete_result}) return json.dumps({
'success': False, 'reason': 'ID必需为数字'})

template下面是html页面

    
大创开支记录
{% for data in data_list %}
{% endfor %}
序号 下单同学 物品 收货日期 订单价格 订单备注 操作
{ {data['id']}} { {data.name}} { {data.age}} { {data.birthday}} { {data.origin_home}} { {data.current_home}}

进入该目录下输入:set FLASK_APP=main.py

flask run --host=0.0.0.0 --port=8000
在这里插入图片描述
然后手机浏览器输入ip即可访问:
在这里插入图片描述
点击添加按钮,可以发现成功添加了数据。

转载地址:http://rtten.baihongyu.com/

你可能感兴趣的文章
Git命令执行从gitee下载、更新、上传、上传更新操作
查看>>
JS定义类的六种方式详解以及几种常用的JS类定义方法
查看>>
总结一下js多种排序方式
查看>>
Vue2和Vue3开发组件有什么区别
查看>>
CSS3新特性有哪些?
查看>>
IDEA必装插件
查看>>
slice、splice、split 三者的区别
查看>>
setTimeout的第三个参数作用
查看>>
setTimeout时间设置为0详细解析
查看>>
设置div不换行
查看>>
MyBatis @SelectKey注解用法介绍
查看>>
`defaultValue` is invalid for `getFieldDecorator` will set `value`解决方案。
查看>>
`Form.Item` cannot generate `validateStatus` and `help` automatically解决方案
查看>>
JS数组中对象赋值问题(针对对象个数未知的赋值报错)
查看>>
oracle的数据类型
查看>>
mybatis学习之 trim和choose
查看>>
element的el-form表单数据绑定或者回显后无法编辑修改
查看>>
java的double类型数据四舍五入及保留N位小数
查看>>
java循环中使用 Map方法put值时value值被覆盖的问题
查看>>
java笔记--Object
查看>>