Boss招聘平台--求职者登录
一、分析实现功能需要实现以下功能账号密码登录手机号验证码登录发送验证码第三方登录-钉钉登录,绑定手机号, 识别同一个用户注册查询个人信息二、数据库设计t_job_seeker求职者表#字段名类型备注或者约束IDInt主键ID,自增手机号字符串唯一密码字符串头像字符串昵称字符串邮箱字符串微信号字符串创建时间日期时间修改时间日期时间from tortoise.models import Model from tortoise import fields class JobSeeker(Model): 求职者表 t_job_seeker # 主键ID自增 id fields.IntField(pkTrue, description主键ID,自增) # 手机号唯一 mobile fields.CharField(max_length20, uniqueTrue, description手机号) # 密码 password fields.CharField(max_length255,nullTrue, description密码) # 头像存储图片url avatar fields.CharField(max_length500, nullTrue, description头像地址) # 昵称 nickname fields.CharField(max_length100, nullTrue, description昵称) # 邮箱 email fields.CharField(max_length100, nullTrue, description邮箱) # 微信号 wechat fields.CharField(max_length100, nullTrue, description微信号) # 创建时间 create_time fields.DatetimeField(auto_now_addTrue, description创建时间) # 修改时间 update_time fields.DatetimeField(auto_nowTrue, description修改时间) class Meta: table t_job_seeker # 指定数据库表名 table_description 求职者表三、接口设计与开发下载依赖pip install python-jose创建工具类:app/utils/jwt_util.py。用于使用FastAPI生成Tokenfrom jose import jwt, JWTError from datetime import datetime, timedelta from typing import Optional, Tuple from app.config.settings import settings SECRET_KEY settings.secret_key ALGORITHM settings.ALGORITHM # 配置不同令牌的过期时间建议在settings中配置 ACCESS_TOKEN_EXPIRE_MINUTES settings.token_expire_minutes # 如30分钟 REFRESH_TOKEN_EXPIRE_DAYS settings.REFRESH_TOKEN_EXPIRE_DAYS # 如7天 # 1. 生成access_token和refresh_token def create_tokens(user_id: str, username: str) - Tuple[str, str]: 生成访问令牌和刷新令牌 :param user_id: 用户ID :param username: 用户名 :return: (access_token, refresh_token) # 构建公共载荷可根据需求扩展 common_payload { user_id: user_id, username: username, type: access # 标记令牌类型 } # 1. 生成access_token短期 access_payload common_payload.copy() access_payload[exp] datetime.utcnow() timedelta(minutesACCESS_TOKEN_EXPIRE_MINUTES) access_token jwt.encode(access_payload, SECRET_KEY, algorithmALGORITHM) # 2. 生成refresh_token长期 refresh_payload common_payload.copy() refresh_payload[type] refresh # 标记为刷新令牌 refresh_payload[exp] datetime.utcnow() timedelta(daysREFRESH_TOKEN_EXPIRE_DAYS) refresh_token jwt.encode(refresh_payload, SECRET_KEY, algorithmALGORITHM) return access_token, refresh_token # 2. 通用令牌验证区分令牌类型 def verify_token(token: str, token_type: str access) - Optional[dict]: 验证令牌并解析载荷 :param token: 令牌字符串 :param token_type: 期望的令牌类型access/refresh :return: 解析后的载荷验证失败返回None try: payload jwt.decode( token, SECRET_KEY, algorithms[ALGORITHM], options{verify_exp: True} # 强制校验过期时间 ) # 校验令牌类型 if payload.get(type) ! token_type: print(f验证失败令牌类型不是{token_type}) return None # 校验必要字段 if not all(key in payload for key in [user_id, username]): print(验证失败载荷缺少必要字段) return None return payload except JWTError as e: print(f验证失败{e}) return None # 3. 使用refresh_token刷新access_token def refresh_access_token(refresh_token: str) - Optional[str]: 通过有效的refresh_token生成新的access_token :param refresh_token: 刷新令牌 :return: 新的access_token刷新失败返回None # 先验证refresh_token的有效性 payload verify_token(refresh_token, token_typerefresh) if not payload: return None # 从refresh_token的载荷中提取用户信息生成新的access_token user_id payload[user_id] username payload[username] # 构建新的access_token载荷 access_payload { user_id: user_id, username: username, type: access, exp: datetime.utcnow() timedelta(minutesACCESS_TOKEN_EXPIRE_MINUTES) } new_access_token jwt.encode(access_payload, SECRET_KEY, algorithmALGORITHM) return new_access_token在service 调用一下:# 生成token access_token, refresh_token create_tokens(str(jobseeker.id), jobseeker.mobile) logger.info(f生成 access_token:{access_token}) logger.info(f生成 refresh_token:{refresh_token})创建工具类:app/utils/generate_code_util.生成手机号验证码 生成随机数的验证码,可以自定义位数 import random def get_random_code(length: int 4): code .join(random.choices(1324567890, klength)) return code创建app/apis/job_seeker_api.py。书写接口from fastapi import APIRouter, Header, Depends, UploadFile, File from app.core.depends import get_server_info from app.schemas.job_seeker import ( LoginMobileRequest, LoginSmsCodeRequest, RegisterRequest, ForgotPasswordRequest, ) from app.services.job_seeker import LoginMobileService, JobSeekerService from app.core.logging import logger job_seeker_router APIRouter(prefix/job_seeker, tags[用户管理]) job_seeker_router.post(/login, summary手机号登录) async def login_mobile(mobiles: LoginMobileRequest): res await LoginMobileService.login_mobile(mobiles) return {code: 1, msg: 登陆成功, data: res}创建app/services/job_seek.py。用于书写逻辑import redis from fastapi import UploadFile from app.core.depends import get_server_info from app.models import JobSeeker from app.schemas.job_seeker import ( LoginMobileRequest, LoginSmsCodeRequest, RegisterRequest, ForgotPasswordRequest, ) from app.utils.generate_code_util import get_random_code from app.utils.jwt_util import create_tokens from app.core.logging import logger from app.utils.oss_util import AliyunOSSTool redis_client redis.Redis(host127.0.0.1, port6379, db9, decode_responsesTrue) class LoginMobileService: staticmethod async def login_mobile(mobiles: LoginMobileRequest): jobseeker await JobSeeker.get_or_none(mobilemobiles.mobile) if jobseeker is None: raise Exception(用户不存在) if jobseeker.password ! mobiles.password: raise Exception(密码错误) # 生成token access_token, refresh_token create_tokens(str(jobseeker.id), jobseeker.mobile) logger.info(faccess_token: {access_token}) logger.info(frefresh_token: {refresh_token}) return {jobseeker: jobseeker, access_token: access_token, refresh_token: refresh_token}创建app/schemas.py.。 创建请求体。from pydantic import BaseModel, Field class LoginMobileRequest(BaseModel): mobile: str Field(..., description手机号) password: str Field(..., description密码)四、总结这套 FastAPI TortoiseORM 技术栈上手简单。实现简单的手机号登录。

相关新闻

AI写作工具如何提升学术论文创作效率

AI写作工具如何提升学术论文创作效率

1. 为什么AI写作工具能减轻创作压力?作为一名在学术圈摸爬滚打十年的研究者,我深刻理解论文写作过程中的痛苦。从开题报告到期刊投稿,每个环节都伴随着巨大的心理压力。直到去年接触了千笔这款AI写作工具,我的写作效率提升了近三倍…

2026/7/24 8:59:02阅读更多 →
GPT-5.6为什么更适合先做分析?直接写代码反而容易返工

GPT-5.6为什么更适合先做分析?直接写代码反而容易返工

摘要: GPT-5.6具备较强的复杂推理和代码处理能力,但项目任务并不是越快生成代码越好。本文从需求理解、修改范围、技术方案、任务拆分和验收检查5个方面,讲清为什么先分析再实现更稳。使用GPT-5.6或Codex写代码时,很多人的第一句话…

2026/7/23 3:49:08阅读更多 →
Gemma大模型视频推理可视化:从原理到实时系统实战

Gemma大模型视频推理可视化:从原理到实时系统实战

在视频内容理解和生成领域,大语言模型的应用正从纯文本处理向多模态方向快速演进。近期在尝试将 Gemma 2B/7B 模型应用于视频推理任务时,发现现有方案大多停留在命令行输出或简单日志层面,缺乏直观的可视化展示。本文基于实际项目经验&#x…

2026/7/24 4:47:19阅读更多 →
AI记忆框架对比:Mem0、MemOS与TiMem架构解析

AI记忆框架对比:Mem0、MemOS与TiMem架构解析

1. 项目概述:AI记忆框架的架构之争 2026年的AI记忆框架领域正经历一场深刻的范式转变。三年前,当大语言模型还停留在"金鱼记忆"阶段时,谁能想到今天会出现Mem0、MemOS和TiMem这样各具特色的解决方案?作为一名从2020年就…

2026/7/24 8:58:03阅读更多 →
基于兰姆波与深度学习的航空航天结构健康监测技术

基于兰姆波与深度学习的航空航天结构健康监测技术

1. 项目背景与核心价值 在航空航天领域,结构健康监测(SHM)就像给飞机装上了"智能体检系统"。传统检测需要停机拆解,而基于兰姆波的SHM技术能在飞行器服役期间持续"把脉",这种非接触式检测方法的效率比传统手段提升5-8倍。…

2026/7/24 8:58:03阅读更多 →
AI时代提示词工程:从代码编写到需求描述的技能跃迁

AI时代提示词工程:从代码编写到需求描述的技能跃迁

1. 标题背后的行业焦虑与现实挑战 "别卷代码了,你的年薪百万,在AI眼里只值3段提示词"这个标题精准戳中了当前技术从业者的集体焦虑。作为在AI和编程领域深耕十年的从业者,我亲眼见证了这个行业从传统编码到智能生成的技术跃迁。这句…

2026/7/24 8:58:03阅读更多 →
多智能体系统协作机制:从状态同步到冲突解决的技术实践

多智能体系统协作机制:从状态同步到冲突解决的技术实践

最近在技术社区中,关于多智能体协作系统的讨论越来越热。很多开发者发现,单纯让一个AI模型完成任务已经不够用了,真实项目往往需要多个智能体协同工作,就像一支技术团队需要不同角色的工程师配合一样。 但问题来了:当…

2026/7/24 8:58:03阅读更多 →
Qwen2.5-7B开源大模型架构解析与本地部署指南

Qwen2.5-7B开源大模型架构解析与本地部署指南

1. 项目概述 Qwen2.5-7B作为通义千问系列的最新开源模型,在编程、数学和指令遵循能力上都有显著提升。这个7B参数规模的模型采用了标准的Transformer架构,但通过一系列精心设计的结构优化,在保持轻量化的同时实现了接近更大模型的性能表现。 …

2026/7/24 8:58:03阅读更多 →
出入境态势智能研判 跨镜零断续迹提升口岸应急处置能力

出入境态势智能研判 跨镜零断续迹提升口岸应急处置能力

一、方案概述当前出入境口岸、边检查验、跨境通关应急管控场景中,普遍存在口岸态势感知碎片化、客流车流态势研判滞后、目标追踪轨迹断续、突发事件定位迟缓、应急处置协同低效、事后溯源复盘无据的核心行业痛点。传统口岸管控依赖人工巡检、分段视频值守、事后回看…

2026/7/24 8:56:02阅读更多 →
Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 0:58:53阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 0:58:53阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 0:58:53阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:06阅读更多 →
【LeetCode 54】螺旋矩阵

【LeetCode 54】螺旋矩阵

问题描述: 解法: 1、模拟(参考自【LeetCode 54】螺旋矩阵-CSDN博客) int *spiralOrder(int **matrix, int matrixSize, int *matrixColSize, int *returnSize) {static const int dirs[4][2] {{0, 1}, {1, 0}, {0, -1}, {-1, …

2026/7/24 0:00:06阅读更多 →
2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

2026 WAIC:模型隐身、智能体疯野,厂商竞赛聚焦办公场景与商业闭环

知春路不相信模型领先今年WAIC大会,昔日AI六小龙来了五家,分别是Kimi、阶跃星辰、Minimax、百川智能、零一万物。连放弃基模的百川和零一万物都来了,唯一缺席的竟是近几个月来风光无限的智谱。(DeepSeek一直不参加)WAI…

2026/7/24 0:00:06阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/23 22:58:43阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/23 18:58:18阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/23 18:58:18阅读更多 →