Flask从入门到做出一个博客的大型教程(四)

本文是Flask博客系统教程的第四部分,主要讲解如何实现用户登录功能。内容包括密码加密存储、Flask-login库的使用、用户模型的完善、登录和登出的视图函数实现,以及登录限制和注册功能的添加。通过本文,读者将学会如何在Flask应用中处理用户身份验证和授权。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flask从入门到做出一个博客的大型教程(四)

在开始之前,先来看下项目的整体结构。

flask
├── app
│   ├── forms.py
│   ├── __init__.py
│   ├── models.py
│   ├── routes.py
│   └── templates
│       ├── base.html
│       ├── index.html
│       └── login.html
├── config.py
├── migrations
│   ├── alembic.ini
│   ├── env.py
│   ├── README
│   ├── script.py.mako
│   └── versions
│       ├── 3884184ade03_tables.py
├── myblog.py


5 用户登录模块

在上一部分讲了数据库,也建立了表,但是用户表里的密码字段一直没用,所以这里讲一讲密码字段。如果密码不加密就明文存储在数据库中,这是一个非常不安全而且愚蠢的行为,所以咱们要一起先看看密码的加密存储。

(venv) duke@coding:~/flask_tutorial/flask$ flask shell
Python 3.6.4 (default, May  3 2018, 19:35:55) 
[GCC 5.4.0 20160609] on linux
App: app [production]
Instance: /home/duke/flask_tutorial/flask/instance
>>> from werkzeug.security import generate_password_hash
>>> hash = generate_password_hash('mima')
>>> hash
'pbkdf2:sha256:50000$S9FPhxbX$4f164ff06b409769e44556bcd9d8f906ca82998e433410f85898245e40ecd4d3'

这样就对密码进行了加密,存储在数据库中。但是用户登录输入的密码要怎么和存储在数据库中的这一大串密码进行比对呢?这是就要用到另外一个函数了。

>>> from werkzeug.security import check_password_hash
>>> check_password_hash(hash,'haha')
False
>>> check_password_hash(hash,'mima')
True

这样就可以根据返回的布尔值来判断用户输入的密码是否正确了。既然掌握了密码的加密和核对,那么就要model进一步完善了。

app/models.py : 完善user模型

# ...
from werkzeug.security import generate_password_hash, check_password_hash



class User(db.Model):
    # ...

    def set_password(self, password):
        self.password_hash = generate_password_hash(password)

    def check_password(self, password):
        return check_password_hash(self.password_hash, password)

user模型修改好了,现在到flask shell中去试一试是否成功能用?

(venv) duke@coding:~/flask_tutorial/flask$ flask shell
Python 3.6.4 (default, May  3 2018, 19:35:55) 
[GCC 5.4.0 20160609] on linux
App: app [production]
Instance: /home/duke/flask_tutorial/flask/instance
>>> from app.models import User
>>> u = User(username='duke'
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值