短信验证功能开发流程
在开发一个包含登录、注册以及短信验证的功能时,你需要遵循一个系统的开发流程。以下是实现这一功能的基本步骤,包括所需的技术和代码示例。
1. 环境配置
首先,确保你的开发环境已经配置好,并安装了必要的库和工具。
pip install fastapi uvicorn sqlalchemy bcrypt python-jose requests
2. 设计数据库模型
设计用户模型来存储用户信息及验证状态。以下是一个使用SQLAlchemy定义用户模型的示例。
models.py
:
from sqlalchemy import Column, Integer, String, Boolean
from database import Base
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
username = Column(String, unique=True, index=True)
hashed_password = Column(String)
is_active = Column(Boolean, default=True)
phone_number = Column(String, unique=True, index=True)
is_verified = Column(Boolean, default=False)
3. 创建用户Schema
定义用户数据的Schema,帮助数据验证和序列化。
schemas.py
:
from pydantic import BaseModel
class UserBase(BaseModel):
username: str
phone_number: str
class UserCreate(UserBase):
password: str
class User(UserBase):
id: int
is_active: bool
is_verified: bool
class Config:
orm_mode = True
4. 编写CRUD操作
实现对用户数据的创建、查询等操作。
crud.py
:
from sqlalchemy.orm import Session
from . import models, schemas
from .security import get_password_hash
def get_user_by_username(db: Session, username: str):
return db.query(models.User).filter(models.User.username == username).first()
def create_user(db: Session, user: schemas.UserCreate):
hashed_password = get_password_hash(user.password)
db_user = models.User(username=user.username, phone_number=user.phone_number, hashed_password=hashed_password)
db.add(db_user)
db.commit()
db.refresh(db_user)
return db_user
5. 实现安全功能
处理密码的哈希和验证。
security.py
:
from passlib.context import CryptContext
pwd_context = CryptContext(schemes=["bcrypt"], deprecated="auto")
def get_password_hash(password):
return pwd_context.hash(password)
def verify_password(plain_password, hashed_password):
return pwd_context.verify(plain_password, hashed_password)
6. 短信发送功能
实现短信发送功能,利用第三方服务提供商的API。
send_sms.py
:
import requests
def send_sms(phone_number: str, message: str):
api_key = "your_sms_api_key"
url = f"https://sms_service.com/send?api_key={api_key}&to={phone_number}&message={message}"
response = requests.get(url)
return response.status_code == 200
7. 创建主应用
集成所有功能,创建FastAPI应用,处理用户注册、验证和短信发送。
main.py
:
from fastapi import FastAPI, Depends, HTTPException
from sqlalchemy.orm import Session
from database import SessionLocal, engine
from auth import models, schemas, crud, security, send_sms
models.Base.metadata.create_all(bind=engine)
app = FastAPI()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@app.post("/register/", response_model=schemas.User)
def register_user(user: schemas.UserCreate, db: Session = Depends(get_db)):
db_user = crud.get_user_by_username(db, username=user.username)
if db_user:
raise HTTPException(status_code=400, detail="Username already registered")
new_user = crud.create_user(db=db, user=user)
verification_code = "123456" # 生成随机验证码
send_sms.send_sms(new_user.phone_number, f"Your verification code is {verification_code}")
return new_user
@app.post("/verify/")
def verify_user(phone_number: str, code: str, db: Session = Depends(get_db)):
# 这里需要验证 code 是否正确
user = db.query(models.User).filter(models.User.phone_number == phone_number).first()
if not user:
raise HTTPException(status_code=404, detail="User not found")
if code == "123456": # 验证逻辑
user.is_verified = True
db.commit()
return {"msg": "User verified"}
else:
raise HTTPException(status_code=400, detail="Invalid code")
8. 启动应用
使用Uvicorn启动FastAPI应用:
uvicorn main:app --reload
总结
在开发包含短信验证功能的系统时,你需要从环境配置、数据库模型设计、数据操作、密码安全、短信发送功能到应用集成等多个方面进行系统化开发。通过上述步骤,你可以构建一个基础的用户注册和验证系统,并实现短信发送功能。随着需求的增加,你可以进一步扩展和优化这些功能。
标签:username,code,Python,db,从零开始,user,开发,import,password From: https://blog.csdn.net/ioioppk/article/details/140785098