使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(二)——使用蓝图功能进行模块化
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(三)——使用Flask-Login库实现登录功能
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(四)——对 run.py 的调整
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(五)——实现注册功能
Flask 中文文档
Flask_Login 文档
Flask-sqlalchemy 文档
Jinja2 模板文档
为了熟悉 Python 的 Web 开发,找到这个框架。在这里记录下使用它来写一个简单的登录 Demo 功能过程中碰到的问题。
上面几个链接就是使用到相关的库的文档。
Flask_Login 这个是官方实现的一套登录验证的库。
Flask_sqlalchemy 是官方对 sqlalchemy 库的一个封装,它是一个ORM,用于做数据库访问。
这里使用的开发工具是 PyCharm,使用这个工具可以直接创建一个 Flask 的项目。
一、从一个简单的示例说起
创建一个 run.py 的代码文件存放在项目的根目录下。
run.py
from flask import Flaskapp = Flask(__name__)@app.route('/') def hello_world():return 'Hello World!'if __name__ == '__main__':app.run()
这是官方文档上的一个最简单能直接运行的应用了
这里要注意的有两个地方:
1.@app.route('/')
这里定义的是一个完整的路由,也就是说,现在这里定义的是“/”,则真实访问的地址就是首页。
2.app 对象
在该对象中进行的一切操作都是全局有效的。
示例:我要在所有的请求开始前,进行一些初始化操作,就可以这样直接使用 app 对象来定义
@app.before_request def before_request():pass
完整的代码是:
from flask import Flaskapp = Flask(__name__)@app.before_request def before_request():passif __name__ == '__main__':app.run()
二、创建应用
根据官方文档的说明,大型应用的目录结构是:
/yourapplication/runserver.py/yourapplication/__init__.py/views.py/static/style.css/templateslayout.htmlindex.htmllogin.html...
所以,要在项目的根目录下,创建一个应用的目录,这里则创建一个 demo 的应用,同时,将根目录下的 static 和 templates 文件夹删除。
在 demo 目录下,创建 3 个文件,分别是:“__init__.py”,“config.py”,“requirements.txt”。
__init__.py 这个就不多说了。
config.py 这个是 Flask 的配置信息。
requirements.txt 这个是用于方便 python 导入库使用的。
requirements.txt 文件里加上以下,这些都是要使用到的库。
Flask Flask-SQLAlchemy Flask-Login Flask-WTF pygments PyMySQL
三、封装 SQLAlchemy 库
1.在 config.py 文件增加以下配置
DEBUG = True SQLALCHEMY_ECHO = False SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://root:root@localhost/test?charset=utf8' SECRET_KEY = '*\xff\x93\xc8w\x13\x0e@3\xd6\x82\x0f\x84\x18\xe7\xd9\\|\x04e\xb9(\xfd\xc3'
配置参数查看这里
2.在 demo 目录下创建一个 common 目录,做为公共库,在该目录下创建 data.py 文件
使用 fetchall() 是取得 SQL 脚本的返回结果,rowcount 才是取得影响行数。
# config=utf-8 from sqlalchemy import create_engine from sqlalchemy.sql import text from demo.config import SQLALCHEMY_DATABASE_URI, SQLALCHEMY_ECHOdef db_query(sql, settings=None, echo=None, args=None):"""执行增删改 SQL 语句Args:sql: SQL 语句settings: 数据库连接字符串echo: 是否输出 SQL 语句args: SQL 参数Returns:执行结果"""if settings is None:settings = SQLALCHEMY_DATABASE_URIif echo is None:echo = SQLALCHEMY_ECHOreturn create_engine(settings, echo=echo).connect().execute(text(sql), args).fetchall()def db_execute(sql, settings=None, echo=None, args=None):"""执行增删改 SQL 语句Args:sql: SQL 语句settings: 数据库连接字符串echo: 是否输出 SQL 语句args: SQL 参数Returns:影响行数"""if settings is None:settings = SQLALCHEMY_DATABASE_URIif echo is None:echo = SQLALCHEMY_ECHOreturn create_engine(settings, echo=echo).connect().execute(text(sql), args).rowcount# 测试代码 # SELECT * FROM py_user # INSERT INTO py_user(name) VALUES('123456') # data = db_query("SELECT * FROM py_user") # print(data)# data = db_execute("INSERT INTO py_user(name) VALUES(:name)", args={'name': '123456'}) # print(data)
3. 在 common 目录下创建一个 __init__.py 文件
__init__.py:
# config=utf-8 from flask_sqlalchemy import SQLAlchemy__all__ = ['db'] db = SQLAlchemy()
这代码用于注册这个数据访问库。
四、初始化应用
对 app 要进行数据库注册,还有传入配置信息等,要注意的是,这里需要另开一个文件来做这些事,不可以全写在 run.py 文件里,因为以后会在使用其它库的时候,在这里进行注册,但在真实使用时就要调用这里生成的对象,这个时候两个文件相互 import 就会出现异常。
所以,这里将 run.py 中创建 app 对象的功能提取到 demo 目录下的 __init__.py 文件里。
/demo/__init__.py
# config=utf-8 from flask import Flask from demo.common import dbdef create_app(config_filename=None):app = Flask(__name__)if config_filename is not None:# 注册数据访问信息 app.config.from_pyfile(config_filename)# 初始化数据库 configure_database(app)return appdef configure_database(app):"""初始化数据库连接。Args:app:应用对象。Returns:该函数没有返回值。"""db.init_app(app)
/run.py 文件里的代码则修改成
# config=utf-8 from flask import g from flask_login import current_user from demo import create_appapp = create_app('config.py')@app.before_request def before_request():"""这里是全局的方法,在请求开始之前调用。其中 flask 有个全局的变量 g,它是和 session 一样的用途,可以使用它来保存当前用户的数据Returns:"""g.user = current_userpassif __name__ == '__main__':app.run()
转载于:https://www.cnblogs.com/cjnmy36723/p/5201551.html
使用 Flask 框架写用户登录功能的Demo时碰到的各种坑(一)——创建应用相关推荐
- mysql flask-login_Flask框架通过Flask_login实现用户登录功能示例
本文实例讲述了Flask框架通过Flask_login实现用户登录功能.分享给大家供大家参考,具体如下: 通过Flask_Login实现用户验证登录,并通过login_required装饰器来判断用户 ...
- [7]深入浅出工作开源框架Camunda: camunda-webapp 用户登录功能代码分析
在上个章节<[6]深入浅出工作开源框架Camunda: 如何远程Debug camunda-webapp的源代码>笔者解释了如何进行Camunda的远程Debug,这个章节笔者给大家分享如 ...
- MVC框架实现用户登录注册功能(连接数据库)
目录 一.简单理解MVC框架 二.项目结构 三.项目源码 3.1 User 3.2 UserDao 3.3 RegisterDao 3.4 servletControll 3.5 servletCon ...
- 使用SSH框架实现用户登录验证
今天,写一个非常简单的通过struts+hibernate+spring的集成来实现用户登录验证的例子,让大家了解一下三者是如何是整合的. 我们可以通过myeclipse的向导,生成相应的环境搭建,如 ...
- php mysql用户登录_php mysql实现用户登录功能的代码示例
接着上次的php mysql添加用户的功能代码,今天来学习下php实现用户登录与注销的功能,通过跟踪session会话来保存用户的登陆状态. 1,登录页面 login.php 用户登录_www.# 用 ...
- Spring框架学习笔记09:基于XML配置方式搭建SSM框架实现用户登录
文章目录 一.采用MVC架构 二.用户登录运行效果 三.基于XML配置方式搭建SSM框架实现用户登录 (一)创建数据库与表 - simonshop (t_user) 1.创建数据库 - simonsh ...
- ssm当用户登录成功显示用户名_从零到企业级SSM电商项目实战教程(十八)用户登录功能开发...
用户模块功能介绍 1.登录 2.用户名验证 3.注册 4.忘记密码 5.提交问题答案 6.重置密码 7.获取用户信息 8.更新用户信息 9.退出登录 学习目标 1.理解横向越权.纵向越权安全漏洞 2. ...
- [转]你会做Web上的用户登录功能吗?
Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关 ...
- java 记录用户_JavaWeb学习记录(六)——用户登录功能
使用JDBC.spring框架.servlet实现一个简单的用户登录功能. 一.mySql数据库 SET FOREIGN_KEY_CHECKS=0; -- ---------------------- ...
最新文章
- asp.net mvc 学习
- web自动化测试常见面试题
- mysql多表查询插入更新_Mysql多表查询,多表插入和多表更新
- 04.local_gateway和network相关设置
- 定时备份 MySQL 并上传到七牛
- Verizon的SDN策略:不鸣则已,一鸣惊人?
- 怎样查看电脑系统版本_用什么软件查维修记录 思域HATCHBACK怎样查询维保记录_汽车事故车查询...
- JavaEE各种Javadoc的下载
- Vmware 15 安装 win7 虚拟机 (初学者操作与详解教程)
- 网络安全工程考试大纲
- 9.深入浅出:集成运放内部电路分析——参考《模拟电子技术基础》清华大学华成英主讲
- 零基础如何用平面设计排版软件PS进行布局构图
- 学大数据需要具备四种条件?你具备几种?
- 患癌女子为生女儿放弃治疗 圆母亲梦后离世
- 单端通用ISM频段接收器 Si4313
- 跟NAS斗智斗勇的个人文件整理日常(没写完)
- 智能合约Smart Contract技术详解
- 谷歌创始人年度公开信:搜索仍是谷歌的核心
- 【信管2.6】项目可研(二)详细可行性研究
- Linux服务器通过X11实现图像化界面显示
热门文章
- vue.js解决刷新404找不到页面问题
- 解决重装 Oracle 出现的 INS-32025 问题,完全卸载 Oracle11g
- hadoop异常: java.io.EOFException: Unexpected end of input stream
- 多重共线性的解决方法之——岭回归与LASSO
- IIS配置Url重写实现http自动跳转https的重定向方法(100%解决)
- 如何基于列值从DataFrame中选择行?
- Windows 11 新功能:管理蓝牙设备将不再困难
- pfa100_什么是PFA?
- mob sdk vue 短信验证_如何快速集成短信验证码API[图文教程]
- python导入dat数据_Kaggle影评数据集,Python数据分析小例子14