python FastAPI操作数据库实现注册登录

代码如下

from fastapi import FastAPI, APIRouter, HTTPException, status
from pydantic import BaseModel
from fastapi.responses import JSONResponse
from typing import Optional
from fastapi.middleware.cors import CORSMiddleware
from utils.time import DateTimeEncoder, getRandomID
from utils.dbutils import insertDB, selectDB
from datetime import datetime
from pydantic import Field

#Pydantic 模型定义
class UserInfo(BaseModel):
    id: int
    user_id: str = Field(..., alias="userId")
    user_name: str = Field(..., alias="userName")# 必须字段,没有默认值
    real_name: Optional[str] = Field("", alias="realName") # 可选字段,默认值为空字符串
    password: str
    phone: str
    person_avatar: Optional[str] = Field("", alias="personAvatar")
    college: Optional[str] = Field("", alias="college")
    major: Optional[str] = Field("", alias="major")
    education: Optional[str] = Field("", alias="education")
    person_desc: Optional[str] = Field(None, alias="personDesc")
    create_time: datetime = Field(..., alias="createTime")
    update_time: Optional[datetime] = Field(None, alias="updateTime")
    is_deleted: int = Field(..., alias="isDeleted")
    last_login_time: int = Field(..., alias="lastLoginTime")

    class Config:
        from_attributes  = True
        populate_by_name = True


class RegisterInfo(BaseModel):
    userName: str 
    phone: str
    password: str
    # password: Optional[str] = None

class LoginInfo(BaseModel):
    phone: str
    password: str


# 登录
@router.post("/login")
async def login(loginInfo: LoginInfo):
    selectSql = '''
            select * from userinfo where phone = '{}' and password = '{}'
    '''.format(loginInfo.phone, loginInfo.password)
    userList = selectDB(selectSql)
    if len(userList) == 1:
       #UserInfo(**userList[0]) 的含义是将 userList[0] 字典中的所有键值对作为关键字参数传递给 UserInfo 模型的构造函数,从而创建一个 UserInfo 实例。
       #例如,如果 userList[0] 是 {"id": 17, "user_id": "uid2024062618231266424", "user_name": "cc", ...},那么 UserInfo(**userList[0]) 相当于 UserInfo(id=17, user_id="uid2024062618231266424", user_name="cc", ...)。
        userInfo = UserInfo(**userList[0])
        #userInfo.dict(by_alias=True) 将模型转换为字典并使用别名,这样返回的数据就会使用驼峰命名法。
        return {"code": 200, "msg": '登录', "data": userInfo.dict(by_alias=True)}

    return {"code": 500, "msg": '登录失败', "data": {}}


#注册
@router.post("/register")
async def register(registerInfo: RegisterInfo):
    selectSql = '''
            SELECT * from userinfo WHERE phone='{}' or user_name='{}'
        '''.format(registerInfo.phone, registerInfo.userName)
    userList = selectDB(selectSql)
    if len(userList) > 0:
        return {"code": 500, "msg": '该用户已存在', "data": {}}
    
    uid = 'uid' + getRandomID()
    sql = '''
    INSERT INTO userinfo(user_id, phone, user_name, password) VALUES('{}', '{}', '{}', '{}')
    '''.format(uid, registerInfo.phone, registerInfo.userName,registerInfo.password)

    effectRow = insertDB(sql=sql)
    print(effectRow)
    if effectRow != 1:
        return {"code": 500, "msg": '注册失败', "data": {}}
    
    return {"code": 200, "msg": '注册成功', "data": {"userId": uid}}

接口调用

postman调用登录接口,返回值
在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FastAPI是一个基于Python的现代、快速(高性能)的Web框架,它可以用于构建高效的API。下面是一个使用FastAPI实现注册和登录功能的示例: 1. 注册功能: ```python from fastapi import FastAPI from pydantic import BaseModel app = FastAPI() class User(BaseModel): username: str password: str users = [] @app.post("/register") def register(user: User): users.append(user) return {"message": "Registration successful"} ``` 2. 登录功能: ```python @app.post("/login") def login(user: User): for u in users: if u.username == user.username and u.password == user.password: return {"message": "Login successful"} return {"message": "Invalid username or password"} ``` 在上面的示例中,我们首先定义了一个`User`模型,用于接收注册和登录请求中的用户名和密码。然后,我们创建了一个空的`users`列表,用于存储注册的用户信息。 在注册功能中,我们使用`@app.post("/register")`装饰器来定义一个POST请求的路由,当用户发送注册请求时,会将请求体中的用户信息添加到`users`列表中,并返回一个注册成功的消息。 在登录功能中,我们使用`@app.post("/login")`装饰器来定义一个POST请求的路由,当用户发送登录请求时,会遍历`users`列表,检查用户名和密码是否匹配。如果匹配成功,则返回一个登录成功的消息;否则,返回一个无效的用户名或密码的消息。 请注意,上述示例只是一个简单的演示,实际应用中可能需要更复杂的逻辑和安全措施,例如密码加密、用户验证等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值