使用 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时碰到的各种坑(一)——创建应用相关推荐

  1. mysql flask-login_Flask框架通过Flask_login实现用户登录功能示例

    本文实例讲述了Flask框架通过Flask_login实现用户登录功能.分享给大家供大家参考,具体如下: 通过Flask_Login实现用户验证登录,并通过login_required装饰器来判断用户 ...

  2. [7]深入浅出工作开源框架Camunda: camunda-webapp 用户登录功能代码分析

    在上个章节<[6]深入浅出工作开源框架Camunda: 如何远程Debug camunda-webapp的源代码>笔者解释了如何进行Camunda的远程Debug,这个章节笔者给大家分享如 ...

  3. MVC框架实现用户登录注册功能(连接数据库)

    目录 一.简单理解MVC框架 二.项目结构 三.项目源码 3.1 User 3.2 UserDao 3.3 RegisterDao 3.4 servletControll 3.5 servletCon ...

  4. 使用SSH框架实现用户登录验证

    今天,写一个非常简单的通过struts+hibernate+spring的集成来实现用户登录验证的例子,让大家了解一下三者是如何是整合的. 我们可以通过myeclipse的向导,生成相应的环境搭建,如 ...

  5. php mysql用户登录_php mysql实现用户登录功能的代码示例

    接着上次的php mysql添加用户的功能代码,今天来学习下php实现用户登录与注销的功能,通过跟踪session会话来保存用户的登陆状态. 1,登录页面 login.php 用户登录_www.# 用 ...

  6. Spring框架学习笔记09:基于XML配置方式搭建SSM框架实现用户登录

    文章目录 一.采用MVC架构 二.用户登录运行效果 三.基于XML配置方式搭建SSM框架实现用户登录 (一)创建数据库与表 - simonshop (t_user) 1.创建数据库 - simonsh ...

  7. ssm当用户登录成功显示用户名_从零到企业级SSM电商项目实战教程(十八)用户登录功能开发...

    用户模块功能介绍 1.登录 2.用户名验证 3.注册 4.忘记密码 5.提交问题答案 6.重置密码 7.获取用户信息 8.更新用户信息 9.退出登录 学习目标 1.理解横向越权.纵向越权安全漏洞 2. ...

  8. [转]你会做Web上的用户登录功能吗?

    Web上的用户登录功能应该是最基本的功能了,可是在我看过一些站点的用户登录功能后,我觉得很有必要写一篇文章教大家怎么来做用户登录功能.下面的文章告诉大家这个功能可能并没有你所想像的那么简单,这是一个关 ...

  9. java 记录用户_JavaWeb学习记录(六)——用户登录功能

    使用JDBC.spring框架.servlet实现一个简单的用户登录功能. 一.mySql数据库 SET FOREIGN_KEY_CHECKS=0; -- ---------------------- ...

最新文章

  1. asp.net mvc 学习
  2. web自动化测试常见面试题
  3. mysql多表查询插入更新_Mysql多表查询,多表插入和多表更新
  4. 04.local_gateway和network相关设置
  5. 定时备份 MySQL 并上传到七牛
  6. Verizon的SDN策略:不鸣则已,一鸣惊人?
  7. 怎样查看电脑系统版本_用什么软件查维修记录 思域HATCHBACK怎样查询维保记录_汽车事故车查询...
  8. JavaEE各种Javadoc的下载
  9. Vmware 15 安装 win7 虚拟机 (初学者操作与详解教程)
  10. 网络安全工程考试大纲
  11. 9.深入浅出:集成运放内部电路分析——参考《模拟电子技术基础》清华大学华成英主讲
  12. 零基础如何用平面设计排版软件PS进行布局构图
  13. 学大数据需要具备四种条件?你具备几种?
  14. 患癌女子为生女儿放弃治疗 圆母亲梦后离世
  15. 单端通用ISM频段接收器 Si4313
  16. 跟NAS斗智斗勇的个人文件整理日常(没写完)
  17. 智能合约Smart Contract技术详解
  18. 谷歌创始人年度公开信:搜索仍是谷歌的核心
  19. 【信管2.6】项目可研(二)详细可行性研究
  20. Linux服务器通过X11实现图像化界面显示

热门文章

  1. vue.js解决刷新404找不到页面问题
  2. 解决重装 Oracle 出现的 INS-32025 问题,完全卸载 Oracle11g
  3. hadoop异常: java.io.EOFException: Unexpected end of input stream
  4. 多重共线性的解决方法之——岭回归与LASSO
  5. IIS配置Url重写实现http自动跳转https的重定向方法(100%解决)
  6. 如何基于列值从DataFrame中选择行?
  7. Windows 11 新功能:管理蓝牙设备将不再困难
  8. pfa100_什么是PFA?
  9. mob sdk vue 短信验证_如何快速集成短信验证码API[图文教程]
  10. python导入dat数据_Kaggle影评数据集,Python数据分析小例子14