首页 > 其他分享 >vibora 经验

vibora 经验

时间:2024-01-19 16:44:27浏览次数:23  
标签:经验 vibora app email user import id User

pip  install  vibora  tortoise-orm
from  tortoise  import  fields,  models
from  tortoise.contrib.pydantic  import  pydantic_model_creator

class  User(models.Model):
      id  =  fields.IntField(pk=True)
      username  =  fields.CharField(max_length=255,  unique=True)
      email  =  fields.CharField(max_length=255,  unique=True)

#  创建  Pydantic  model,方便在请求处理中使用
UserPydantic  =  pydantic_model_creator(User,  name='User')
from  tortoise  import  Tortoise

async  def  init_db():
      #  这里配置数据库连接
      TORTOISE_ORM  =  {
          'connections':  {
              'default':  {
                  'engine':  'asyncpg',
                  'host':  '127.0.0.1',
                  'port':  '5432',
                  'user':  'user',
                  'password':  'password',
                  'database':  'test_db',
              },
          },
          'apps':  {
              'models':  {
                  'models':  ['models'],    #  注册我们的models模块
                  'default_connection':  'default',
              },
          },
      }
     
      await  Tortoise.init(TORTOISE_ORM)
      await  Tortoise.generate_schemas()
from  vibora  import  Vibora,  Request
from  pydantic  import  BaseModel
from  tortoise.exceptions  import  DoesNotExist
from  models  import  User,  UserPydantic
from  db_config  import  init_db

app  =  Vibora()

@app.listener('before_server_start')
async  def  setup_db(app,  loop):
      await  init_db()

#  创建一个请求模型来验证输入
class  CreateUser(BaseModel):
      username:  str
      email:  str

@app.route('/users',  methods=['POST'])
async  def  create_user(request:  Request,  user:  CreateUser):
      user  =  await  User.create(username=user.username,  email=user.email)
      return  {'id':  user.id,  'username':  user.username,  'email':  user.email}

@app.route('/users/{user_id}',  methods=['GET'])
async  def  get_user(request:  Request,  user_id:  int):
      try:
          user  =  await  User.get(id=user_id).prefetch_related('user')
          return  {'id':  user.id,  'username':  user.username,  'email':  user.email}
      except  DoesNotExist:
          return  {'error':  'User  not  found'},  404

@app.route('/users/{user_id}',  methods=['PUT'])
async  def  update_user(request:  Request,  user_id:  int,  user:  CreateUser):
      try:
          await  User.filter(id=user_id).update(username=user.username,  email=user.email)
          return  {'message':  'User  updated  successfully'}
      except  DoesNotExist:
          return  {'error':  'User  not  found'},  404

@app.route('/users/{user_id}',  methods=['DELETE'])
async  def  delete_user(request:  Request,  user_id:  int):
      try:
          await  User.get(id=user_id).delete()
          return  {'message':  'User  deleted  successfully'}
      except  DoesNotExist:
          return  {'error':  'User  not  found'},  404

if  __name__  ==  '__main__':
      app.run(debug=True)
from  vibora  import  Vibora
from  db_config  import  init_db
from  routes  import  setup_routes

app  =  Vibora()

@app.listener('before_server_start')
async  def  setup_db(app,  loop):
      await  init_db()

#  设置路由
setup_routes(app)

if  __name__  ==  '__main__':
      app.run(debug=True)
from  pydantic  import  BaseModel
from  tortoise.exceptions  import  DoesNotExist
from  models  import  User,  UserPydantic
from  vibora  import  Request,  route

class  CreateUser(BaseModel):
      username:  str
      email:  str

@route('/users',  methods=['POST'])
async  def  create_user(request:  Request,  user:  CreateUser):
      user  =  await  User.create(username=user.username,  email=user.email)
      return  {'id':  user.id,  'username':  user.username,  'email':  user.email}

@route('/users/{user_id}',  methods=['GET'])
async  def  get_user(request:  Request,  user_id:  int):
      try:
          user  =  await  User.get(id=user_id).prefetch_related('user')
          return  {'id':  user.id,  'username':  user.username,  'email':  user.email}
      except  DoesNotExist:
          return  {'error':  'User  not  found'},  404

@route('/users/{user_id}',  methods=['PUT'])
async  def  update_user(request:  Request,  user_id:  int,  user:  CreateUser):
      try:
          await  User.filter(id=user_id).update(username=user.username,  email=user.email)
          return  {'message':  'User  updated  successfully'}
      except  DoesNotExist:
          return  {'error':  'User  not  found'},  404

@route('/users/{user_id}',  methods=['DELETE'])
async  def  delete_user(request:  Request,  user_id:  int):
      try:
          await  User.get(id=user_id).delete()
          return  {'message':  'User  deleted  successfully'}
      except  DoesNotExist:
          return  {'error':  'User  not  found'},  404

def  setup_routes(app):
      app.add_route(create_user)
      app.add_route(get_user)
      app.add_route(update_user)
      app.add_route(delete_user)
from  vibora  import  Vibora,  Request,  Response
from  vibora.responses  import  JSONResponse
from  db_config  import  init_db
from  routes  import  setup_routes
from  middleware  import  token_middleware
import  asyncio
import  datetime

app  =  Vibora()

@app.listener('before_server_start')
async  def  setup_db(app,  loop):
      await  init_db()

#  设置路由
setup_routes(app)

#  定时事务
async  def  schedule_transactions(app):
      while  True:
          #  第一个事务:每6秒处理一次
          await  asyncio.sleep(6)
          print("Running  the  first  transaction...")

          #  第二个事务:每33分钟处理一次
          await  asyncio.sleep(33  *  60)
          print("Running  the  second  transaction...")

          #  第三个事务:每天早上1点到5点之间处理
          now  =  datetime.datetime.now()
          if  now.hour  >=  1  and  now.hour  <  5:
              print("Running  the  third  transaction...")
              #  确保不会在1小时内多次执行
              await  asyncio.sleep((5  -  now.hour)  *  3600  -  now.minute  *  60)

#  跨域处理中间件
@app.middleware
async  def  cors_middleware(request:  Request,  handler):
      response  =  await  handler(request)
      response.headers['Access-Control-Allow-Origin']  =  '*'    #  允许所有来源
      response.headers['Access-Control-Allow-Methods']  =  'GET,  POST,  PUT,  DELETE,  OPTIONS'
      response.headers['Access-Control-Allow-Headers']  =  'Content-Type,  Authorization'
      return  response

#  使用中间件验证token
app.middleware(token_middleware)

#  启动定时事务
@app.listener('after_server_start')
async  def  start_scheduling(app,  loop):
      loop.create_task(schedule_transactions(app))

if  __name__  ==  '__main__':
      app.run(debug=True)
from  vibora  import  Request,  Response
from  typing  import  Awaitable
from  jose  import  jwt    #  假设使用的是PyJWT库

async  def  token_middleware(request:  Request,  handler:  Awaitable)  ->  Response:
      token  =  request.headers.get('Authorization',  '').replace('Bearer  ',  '')
      if  token:
          try:
              #  假设你的secret_key是在环境变量中
              user_info  =  jwt.decode(token,  'secret_key',  algorithms=['HS256'])
              #  将用户信息添加到请求中
              request.state.user_info  =  user_info
          except:
              return  JSONResponse({'error':  'Invalid  token'},  status_code=401)
      else:
          return  JSONResponse({'error':  'Token  is  missing'},  status_code=401)
      return  await  handler(request)

 










标签:经验,vibora,app,email,user,import,id,User
From: https://www.cnblogs.com/pearlcity/p/17975028

相关文章

  • japronto 经验
    pipinstalljaprontotortoise-ormfromtortoiseimportTortoise,fieldsfromtortoise.modelsimportModel#定义Tortoise配置TORTOISE_ORM={'connections':{'default':{'engine�......
  • C# 开发经验
    C#泛型作为返回类型的写法publicstaticTGetObj<T>(Employeemodel){Tresult=default(T);if(modelisT){result=(T)(object)model;//或(T)((object)model);}returnre......
  • 大龄码农的转型:总结免费升讯威在线客服系统的推广经验与成绩
    就像没有一个画匠不想办一场属于自己的画展,没有一个歌者不想写一首自己的歌。也许只有为数不多的听众,但是当他怀疑自己时,还是会有忠实的听众支持他继续走下去。我在业余时间开发维护了一款在线客服系统,一是兴趣使然,另一方面,正如上文。我想如果有一天我离开了这个行业,我也会继......
  • JMeter测试WebSocket的经验总结
    最近有一个微信聊天系统的项目需要性能测试,既然是测试微信聊天,肯定绕不开websocket接口的测试,首选工具是Jmeter,网上能搜到现成的方法,但是网上提供的jar包往往不是最新的,既然是用最新版本的Jmeter4.0,那么所依赖的插件jar包也应该追求新的。所以提供了以下链接供大家下载(甚至连源码......
  • 如何做好一个信息系统项目经理,一个项目经理的个人体会和经验总结(一)
    作为一个信息系统项目经理,最要紧的就是要明白什么是因地制宜、因势利导,只有最合适的,没有什么叫对的,什么叫错的;最忌讳的就是完美主义倾向,凡事都要寻找标准答案和最优答案,既耽误了项目进度,也迷茫了自己。以下是本人一些做信息系统项目的个人体会和经验总结,写出来供大家指点,在讨论过......
  • 快准稳:值得所有运维学习的SRE故障处理经验
    在网络上关于SRE的讨论中,故障相关的内容比比皆是,但关于故障发生时的应急处理过程的详细讨论却寥寥无几。然而面对故障,故障指挥官一定面临着较大的压力,需要快速、正确地处置故障,应对内外部的挑战。在这篇文章中,我们将重点探讨故障指挥官在故障处理过程中的具体行动思路。值得注意......
  • 经验值
    #include<iostream>usingnamespacestd;intp[100005],nxt[100005],pre[100005],d[100005];//定义四个整数数组,用于存储数据intmain(){intn;longlongans;//定义整数n和长整型ans,n表示数组长度,ans用于存储结果cin>>n;//从标......
  • 华为产品创新经验,帮你成为更好的产品创新者
    在这个“内卷”的时代,企业不能再依靠单品的创新,而必须开展系统性的产品创新。如何开展系统性的产品创新?这就得提及时习知的新课《产品创新:如何系统性提升核心竞争力》。课程融合了系统思维和华为实践,能帮助你跳出现有产品,构建出更卓越的产品。课程链接: 华为数字化工作坊(huawei.c......
  • 前端面试经验
    回调地狱及解决办法回调函数中嵌套回调函数这种情况就称为回调地狱,就是为了让回调函数满足异步的情况(比如setTimeout里面的先执行再执行后面的函数,一般来说就要嵌套setTimeout也就是回调地狱),(回调函数就是当一个函数作为参数传入另一个参数中,并且它不会立即执行,只有当满足一定条件......
  • antd-pro 使用经验
    antd-pro中的很多组件,都是对antd组件的封装所以,很多属性配置,都可以通用的!先说antd-pro-table遇到的问题1.请求的时候,搜索和分页相关的参数,都会拼接到url上,这显然不好2.使用table的,scroll属性配置,配置pro-table。可以实现pro-table的纵向滚动3.使用options={{false}}可以隐......