FastAPI 快速开发 Web API 项目:实现 FastAPI的用户注册和登录路由

FastAPI 系列文章目录

前言

在上篇中,我们介绍了文件结构化的优点,并给出了最简单的 FastAPI 项目的结构 Demo,并实现了模型的定义,这一篇我们实现路由系统和主文件,并进行相应的测试。

实现路由

构建应用程序的下一步是为我们的应用程序接口设置路由系统。 我们将为待办事项和用户设计路由系统。用户路由将包括登录退出注册。通过身份验证的用户可以访问创建、更新和删除待办事项的路由,而用户可以在事件创建后查看事件。下图显示了两种路径之间的关系:

用户路由

在之前定义的注册路径中,我们使用了应用程序内的数据库。在添加新用户之前,该路由会检查数据库中是否存在具有类似电子邮件地址的用户。在 router/users.py 中定义:

python 复制代码
from fastapi import APIRouter, HTTPException, status
from models.users import User, UserSignIn


user_router = APIRouter(
    tags=["User"]
)

users = {}

@user_router.post("/signup")
async def signup_new_user(data: User) -> dict:
    """Create a new user"""
    if data.email in users:
        raise HTTPException(
            status_code=status.HTTP_409_CONFLICT,
            detail="User with supplied email address already exists"
        )
    users[data.email] = data

    return {
        "message": "User successfully registered!"
    }

@user_router.post("/signin")
async def signin_new_user(data: UserSignIn) -> dict:
    """User login in"""
    if data.email not in users:
        raise HTTPException(
            status_code=status.HTTP_404_NOT_FOUND,
            detail="User does not exist"
        )

    if users[data.email].password != data.password:
        raise HTTPException(
            status_code=status.HTTP_403_FORBIDDEN,
            detail="You input a wrong password"
        )

    return {
        "message": "User signed in successfully!"
    }

在登录路径中,第一步是检查数据库中是否存在这样的用户,如果不存在,就会出现异常。如果用户存在,应用程序将继续检查密码是否匹配,然后返回成功或异常信息。

启动程序

然后让我们来定义 main.py 文件,写入如下的代码:

python 复制代码
from fastapi import FastAPI
from routes.users import user_router

import uvicorn


app = FastAPI()


# Register routes
app.include_router(user_router, prefix="/user")

if __name__ == "__main__":
    uvicorn.run("main:app", host="127.0.0.1", port=8080, reload=True)

在这段代码中,我们创建了 FastAPI 实例并且注册了 user 的路由,现在我们通过 uvicorn.run() 方法来启动我们的程序,同时设置热启动为 True,接下来通过命令行来启动程序,在 Bash 中输入 python main.py,如下图表示启动成功:

测试注册

接下来让我们启动测试,看能否实现用户的注册操作,另外打开一个终端,输入下面的内容来注册用户:

css 复制代码
curl -X 'POST' 'http://127.0.0.1:8080/user/signup' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{
"email": "test12345@outlook.com",
"password": "djkfhj85adGD#$4!",
"username": "demo",
"events": []
}'

如果得到如下的消息,表明注册成功:

json 复制代码
{"message":"User successfully registered!"} 

如果再次请求,则会得到如下错误:

服务器端也会得到如下的两条响应:

  • 一条是注册成功 200 OK
  • 一条是邮箱重复冲突 409 Conflict

接下来,让我们来测试登录路由功能,在终端中输入下面的 curl 命令:

vbnet 复制代码
curl -X 'POST' \
'http://127.0.0.1:8080/user/signin' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '{
"username": "demo",
"email": "test12345@outlook.com",
"password": "djkfhj85adGD#$4!"
}'

登录成功的话,会得到如下的一条返回消息:

json 复制代码
{"message":"User signed in successfully!"}  

截图成功如下:

服务器终端会有注册成功和登录成功的两条 200 OK 的响应码,说明程序正常运行:

但如果我们此时输入一条不一样的密码,例如:

css 复制代码
curl -X 'POST' 'http://127.0.0.1:8080/user/signin' -H 'accept: application/json' -H 'Content-Type: application/json' -d '{
"username": "demo",
"email": "test12345@outlook.com",
"password": "123456"
}'
{"detail":"You input a wrong password"} 

则会得到服务器 INFO: 127.0.0.1:12583 - "POST /user/signin HTTP/1.1" 403 Forbidden 的错误,同时会收到响应消息如下图:

为了更方便的看我们的接口文档,可以从 FastAPI 提供的交互式文档中查看我们的路由。让我们在浏览器中访问 http://127.0.0.1:8080/docs 访问交互式文档:

总结

此时,我们已经实现了用户的路由,接下来,让我们看看如何实现待办事项 events 的路由。这篇文章还没实现退出登录,感兴趣的读者可以自己在本地实现一下,期待你的成功,然后来评论区分享你喜悦的结果。

希望本文能对你有所帮助,如果喜欢本文,可以点个关注。

下一篇文章见!宇宙古今无有穷期,一生不过须臾,当思奋争。

相关推荐
这个男人是小帅25 分钟前
【GAT】 代码详解 (1) 运行方法【pytorch】可运行版本
人工智能·pytorch·python·深度学习·分类
码上一元2 小时前
SpringBoot自动装配原理解析
java·spring boot·后端
小白学大数据3 小时前
Python爬虫开发中的分析与方案制定
开发语言·c++·爬虫·python
Shy9604184 小时前
Doc2Vec句子向量
python·语言模型
枫叶_v4 小时前
【SpringBoot】22 Txt、Csv文件的读取和写入
java·spring boot·后端
杜杜的man5 小时前
【go从零单排】Closing Channels通道关闭、Range over Channels
开发语言·后端·golang
java小吕布5 小时前
Java中Properties的使用详解
java·开发语言·后端
2401_857610036 小时前
Spring Boot框架:电商系统的技术优势
java·spring boot·后端
秀儿还能再秀7 小时前
机器学习——简单线性回归、逻辑回归
笔记·python·学习·机器学习
阿_旭8 小时前
如何使用OpenCV和Python进行相机校准
python·opencv·相机校准·畸变校准