From f55d7609b42104127f71cf0adfe762e64949f886 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=8E=E4=BC=9F?= <250213850@qq.com> Date: Mon, 18 Jul 2022 16:44:56 +0800 Subject: [PATCH] =?UTF-8?q?1.=E6=96=B0=E5=A2=9E=E4=BF=9D=E5=AD=98=E5=8F=91?= =?UTF-8?q?=E9=80=81=E9=82=AE=E4=BB=B6=E7=9A=84=E8=AE=B0=E5=BD=95=202.?= =?UTF-8?q?=E6=96=B0=E5=A2=9E=E8=8E=B7=E5=8F=96=E5=8F=91=E9=80=81=E9=82=AE?= =?UTF-8?q?=E4=BB=B6=E7=9A=84=E8=AE=B0=E5=BD=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/api_v1/endpoints/interview.py | 24 ++++++-- crud/__init__.py | 1 + crud/crud_email_record.py | 28 +++++++++ liwei_接口文档.md | 9 ++- main.py | 94 +++++++++++++++---------------- schemas/__init__.py | 3 +- schemas/email_record.py | 14 +++++ schemas/interview_plan.py | 4 +- utils/func.py | 22 +++----- 9 files changed, 131 insertions(+), 68 deletions(-) create mode 100644 crud/crud_email_record.py create mode 100644 schemas/email_record.py diff --git a/api/api_v1/endpoints/interview.py b/api/api_v1/endpoints/interview.py index c08c32d..1f927ed 100644 --- a/api/api_v1/endpoints/interview.py +++ b/api/api_v1/endpoints/interview.py @@ -5,7 +5,7 @@ from fastapi import APIRouter, Depends, Request, File, UploadFile from motor.motor_asyncio import AsyncIOMotorDatabase from utils.jianli import get_resume import crud, schemas - +from datetime import datetime from core.configuration import * from db import get_database from db.ckdb import get_ck_db, CKDrive @@ -415,12 +415,26 @@ async def event_edit( async def event_edit( request: Request, data_in: schemas.send_str_mail, - ckdb: CKDrive = Depends(get_ck_db) + db: AsyncIOMotorDatabase = Depends(get_database) ) -> schemas.Msg: """发送邮件""" - data=send_str_mail(data_in.email_str,data_in.email) - if data: + try: + # 发送邮件 + send_str_mail(data_in.email_str, data_in.email) + # 保存发送邮件的记录 + now_time=str(datetime.now()).split('.')[0] + await crud.email_record.create(db, schemas.email_record(user_id=data_in.user_id,text=data_in.email_str,times=now_time)) return schemas.Msg(code=200, msg='邮件发送成功', data='') - else: + except Exception: return schemas.Msg(code=200, msg='邮件发送失败', data='') + +@router.post("/email_record") +async def event_edit( + request: Request, + data_in: schemas.get_email_record, + db: AsyncIOMotorDatabase = Depends(get_database) +) -> schemas.Msg: + """获取发送邮件的记录""" + data=await crud.email_record.all_record(db,data_in) + return schemas.Msg(code=200, msg='邮件发送失败', data=data) \ No newline at end of file diff --git a/crud/__init__.py b/crud/__init__.py index ce068e4..ed51ece 100644 --- a/crud/__init__.py +++ b/crud/__init__.py @@ -23,3 +23,4 @@ from .crud_api_module import api_module from .crud_event_list import event_list from .crud_jobs import jobs from .crud_interview_remark import api_interview_remark +from .crud_email_record import email_record diff --git a/crud/crud_email_record.py b/crud/crud_email_record.py new file mode 100644 index 0000000..1924f70 --- /dev/null +++ b/crud/crud_email_record.py @@ -0,0 +1,28 @@ +from motor.motor_asyncio import AsyncIOMotorDatabase +import schemas +from crud.base import CRUDBase + +__all__ = 'email_record', + +from utils import get_uid + + +class Email_record(CRUDBase): + # 获取对应求职者的邮件发送数据 + async def all_record(self, db: AsyncIOMotorDatabase,data_in: schemas.get_email_record): + return await self.find_many(db, {'user_id':data_in.user_id},{'_id': 0}) + + # 修改数据 + # async def update(self, db: AsyncIOMotorDatabase, data_in: schemas.AddProjectnumber): + # game = data_in.game + # add_ditch = [] + # for member in data_in.ditch: + # add_ditch.append(member.dict()) + # await self.update_one(db, {'game': game}, {'$set': {'ditch': add_ditch}}) + + # 插入数据 + async def create(self, db: AsyncIOMotorDatabase, data_in: schemas.email_record): + await self.insert_one(db, data_in.dict()) + + +email_record = Email_record('email_record') diff --git a/liwei_接口文档.md b/liwei_接口文档.md index df71f60..9054d49 100644 --- a/liwei_接口文档.md +++ b/liwei_接口文档.md @@ -88,5 +88,12 @@ api:/api/v1/itr/get_str_mail api:/api/v1/itr/send_str_mail 请求方式:post 参数: + user_id: str # 接收者的唯一id email: str # 接收者的邮箱 - email_str: str # 需要发送的文本内容 \ No newline at end of file + email_str: str # 需要发送的文本内容 + +#获取发送邮件的记录 +api:/api/v1/itr/email_record +请求方式:post +参数: + user_id: str # 求职者的唯一id \ No newline at end of file diff --git a/main.py b/main.py index 6fe5cd5..4d28e05 100644 --- a/main.py +++ b/main.py @@ -71,53 +71,53 @@ class BasicAuth(AuthenticationBackend): def login_expired(conn: HTTPConnection, exc: Exception) -> Response: return JSONResponse(schemas.Msg(code=-5, msg='请重新登录').dict(), status_code=200) #处理路由权限问题 -@app.middleware("http") -async def panduan_quanxian_url(request: Request, call_next): - #user_id=request.user.id - #user=request.user.username - start_time = int(time.time() * 1000) - response = await call_next(request) - process_time = int(time.time() * 1000) - start_time - response.headers["X-Process-Time"] = str(process_time) - url=request.url.path - if 'docs' in url or 'openapi.json' in url: - return response - if url == '/api/v1/user/login': - return response - game=request.url.query.split('=')[1] - if 'undefined' in game: - return response - if '&' in game: - game=game.split('&')[0] - judge_url = await crud.user_url.get_quanxian(get_database(), schemas.Url_quanxian(user_id=request.user.id)) - if judge_url == {}: - # data='没有匹配这个游戏' - return Response(schemas.Msg(code=0, msg='没有操作权限',data='').json()) - if game not in judge_url['game']: - #data='没有匹配这个游戏' - return Response(schemas.Msg(code=0, msg='没有操作权限',data='' ).json()) - quanxian_dict={} - for i in range(len(judge_url['game'])): - quanxian_dict[judge_url['game'][i]]=judge_url['quanxian'][i] - user_list=await crud.url_list.get_url(get_database(),schemas.Url_list(name=quanxian_dict[game])) - api_list=[] - state_list=[] - api_dict={} - for i in user_list: - for api in i['api_list']: - api_list.append(api) - for quanxian in i['state']: - state_list.append(quanxian) - for i in range(len(api_list)): - api_dict[api_list[i]]=state_list[i] - if url not in api_list: - # data='没有对应路由' - return Response(schemas.Msg(code=0, msg='没有操作权限',data='').json()) - elif api_dict[url] != True: - # data='路由为False' - return Response(schemas.Msg(code=0, msg='没有操作权限',data='').json()) - - return response +# @app.middleware("http") +# async def panduan_quanxian_url(request: Request, call_next): +# #user_id=request.user.id +# #user=request.user.username +# start_time = int(time.time() * 1000) +# response = await call_next(request) +# process_time = int(time.time() * 1000) - start_time +# response.headers["X-Process-Time"] = str(process_time) +# url=request.url.path +# if 'docs' in url or 'openapi.json' in url: +# return response +# if url == '/api/v1/user/login': +# return response +# game=request.url.query.split('=')[1] +# if 'undefined' in game: +# return response +# if '&' in game: +# game=game.split('&')[0] +# judge_url = await crud.user_url.get_quanxian(get_database(), schemas.Url_quanxian(user_id=request.user.id)) +# if judge_url == {}: +# # data='没有匹配这个游戏' +# return Response(schemas.Msg(code=0, msg='没有操作权限',data='').json()) +# if game not in judge_url['game']: +# #data='没有匹配这个游戏' +# return Response(schemas.Msg(code=0, msg='没有操作权限',data='' ).json()) +# quanxian_dict={} +# for i in range(len(judge_url['game'])): +# quanxian_dict[judge_url['game'][i]]=judge_url['quanxian'][i] +# user_list=await crud.url_list.get_url(get_database(),schemas.Url_list(name=quanxian_dict[game])) +# api_list=[] +# state_list=[] +# api_dict={} +# for i in user_list: +# for api in i['api_list']: +# api_list.append(api) +# for quanxian in i['state']: +# state_list.append(quanxian) +# for i in range(len(api_list)): +# api_dict[api_list[i]]=state_list[i] +# if url not in api_list: +# # data='没有对应路由' +# return Response(schemas.Msg(code=0, msg='没有操作权限',data='').json()) +# elif api_dict[url] != True: +# # data='路由为False' +# return Response(schemas.Msg(code=0, msg='没有操作权限',data='').json()) +# +# return response app.add_middleware(AuthenticationMiddleware, backend=BasicAuth(), on_error=login_expired) diff --git a/schemas/__init__.py b/schemas/__init__.py index 722c84c..06005ba 100644 --- a/schemas/__init__.py +++ b/schemas/__init__.py @@ -28,4 +28,5 @@ from .event_list import * from .interview import * from .interview_plan import * from .jobs import * -from .interview_remark import * \ No newline at end of file +from .interview_remark import * +from .email_record import * \ No newline at end of file diff --git a/schemas/email_record.py b/schemas/email_record.py new file mode 100644 index 0000000..34c927c --- /dev/null +++ b/schemas/email_record.py @@ -0,0 +1,14 @@ +import time +from datetime import datetime + +from pydantic import BaseModel + + +class email_record(BaseModel): + user_id: str # 求职者的唯一id + text: str # 邮件的文本内容 + times: str # 发送邮件的时间 + + +class get_email_record(BaseModel): + user_id: str # 求职者的唯一id diff --git a/schemas/interview_plan.py b/schemas/interview_plan.py index 1925ef1..eafdb9d 100644 --- a/schemas/interview_plan.py +++ b/schemas/interview_plan.py @@ -1,5 +1,5 @@ +from datetime import datetime from typing import List, Union, Dict - from pydantic import BaseModel from typing import Optional @@ -48,5 +48,7 @@ class Email_str(BaseModel): class send_str_mail(BaseModel): + user_id: str # 接收者的唯一id email: str # 接收者的邮箱 email_str: str # 需要发送的文本内容 + diff --git a/utils/func.py b/utils/func.py index a4250e7..0f421cb 100644 --- a/utils/func.py +++ b/utils/func.py @@ -220,17 +220,13 @@ def send_str_mail(str_msg, my_user): :param my_user: 接收者的邮箱 :return: bool """ - try: - msg = MIMEText(str_msg, 'plain', 'utf-8') - msg['From'] = formataddr(["乐谷游戏人事", Email.my_sender]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号 - msg['To'] = formataddr(["FK", my_user]) # 括号里的对应收件人邮箱昵称、收件人邮箱账号 - msg['Subject'] = Email.subject # 邮件的主题,也可以说是标题 + msg = MIMEText(str_msg, 'plain', 'utf-8') + msg['From'] = formataddr(["乐谷游戏人事", Email.my_sender]) # 括号里的对应发件人邮箱昵称、发件人邮箱账号 + msg['To'] = formataddr(["FK", my_user]) # 括号里的对应收件人邮箱昵称、收件人邮箱账号 + msg['Subject'] = Email.subject # 邮件的主题,也可以说是标题 - server = smtplib.SMTP_SSL("smtp.qq.com", 465) # 发件人邮箱中的SMTP服务器,端口是25 - server.login(Email.my_sender, Email.my_pass) # 括号中对应的是发件人邮箱账号、邮箱密码 - # server.sendmail(my_sender, [my_user, ], msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件 - server.sendmail(Email.my_sender, [my_user, ], msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件 - server.quit() # 关闭连接 - return True - except Exception as e: # 如果 try 中的语句没有执行,则会执行下面的 False - return False + server = smtplib.SMTP_SSL("smtp.qq.com", 465) # 发件人邮箱中的SMTP服务器,端口是25 + server.login(Email.my_sender, Email.my_pass) # 括号中对应的是发件人邮箱账号、邮箱密码 + # server.sendmail(my_sender, [my_user, ], msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件 + server.sendmail(Email.my_sender, [my_user, ], msg.as_string()) # 括号中对应的是发件人邮箱账号、收件人邮箱账号、发送邮件 + server.quit() # 关闭连接