首页 > 其他分享 >japronto 经验

japronto 经验

时间:2024-01-19 16:33:48浏览次数:18  
标签:__ 经验 app request japronto item async def

pip  install  japronto  tortoise-orm
from  tortoise  import  Tortoise,  fields
from  tortoise.models  import  Model

#  定义  Tortoise  配置
TORTOISE_ORM  =  {
      'connections':  {
          'default':  {
              'engine':  'tortoise.backends.mysql',
              'credentials':  {
                  'host':  '127.0.0.1',
                  'port':  '3306',
                  'user':  'your_username',
                  'password':  'your_password',
                  'database':  'your_database',
              }
          }
      },
      'apps':  {
          'models':  {
              'models':  ['__main__'],
              'default_connection':  'default',
          }
      }
}

#  定义模型
class  Item(Model):
      id  =  fields.IntField(pk=True)
      name  =  fields.CharField(unique=True,  max_length=255)

#  初始化  Tortoise
async  def  initialize_db():
      await  Tortoise.init(TORTOISE_ORM)
      await  Tortoise.generate_schemas()

#  关闭  Tortoise
async  def  close_db():
      await  Tortoise.close_connections()
from  japronto  import  Application
import  json

app  =  Application()

#  初始化数据库
app.loop.create_task(initialize_db())

#  增删查改操作
async  def  get_item(request,  item_id):
      try:
          item  =  await  Item.get(id=item_id)
          return  json.dumps(item.__dict__)
      except  Item.DoesNotExist:
          return  request.Response(status_code=404)

async  def  create_item(request):
      data  =  await  request.json()
      item  =  await  Item.create(name=data['name'])
      return  json.dumps(item.__dict__),  {'Content-Type':  'application/json'}

async  def  update_item(request,  item_id):
      data  =  await  request.json()
      try:
          item  =  await  Item.get(id=item_id)
          item.name  =  data['name']
          await  item.save()
          return  json.dumps(item.__dict__)
      except  Item.DoesNotExist:
          return  request.Response(status_code=404)

async  def  delete_item(request,  item_id):
      try:
          item  =  await  Item.get(id=item_id)
          await  item.delete()
          return  request.Response(status_code=204)
      except  Item.DoesNotExist:
          return  request.Response(status_code=404)

#  定义路由
@app.route('/items/<int:item_id>')
async  def  handle_get(request,  item_id):
      return  await  get_item(request,  item_id)

@app.route('/items',  methods=['POST'])
async  def  handle_post(request):
      return  await  create_item(request)

@app.route('/items/<int:item_id>',  methods=['PUT'])
async  def  handle_put(request,  item_id):
      return  await  update_item(request,  item_id)

@app.route('/items/<int:item_id>',  methods=['DELETE'])
async  def  handle_delete(request,  item_id):
      return  await  delete_item(request,  item_id)

#  程序入口
if  __name__  ==  '__main__':
      app.run(debug=True)
pip  install  PyJWT
import  jwt
from  japronto  import  Middleware

#  假设你的  JWT  密钥和验证逻辑如下
JWT_SECRET_KEY  =  'your_secret_key'
ALGORITHM  =  'HS256'

class  AuthMiddleware(Middleware):
      async  def  handle_request(self,  request):
          #  从请求头中获取  token
          token  =  request.headers.get('Authorization',  '').replace('Bearer  ',  '')
         
          if  token:
              try:
                  #  解码  token  并获取用户信息
                  payload  =  jwt.decode(token,  JWT_SECRET_KEY,  algorithms=[ALGORITHM])
                  user_info  =  payload.get('user_info',  {})    #  假设  JWT  中包含用户信息字段
                 
                  #  将用户信息写入请求对象
                  request.user_info  =  user_info
                 
              except  jwt.InvalidTokenError:
                  #  如果  token  无效,可以返回错误响应或继续处理请求
                  pass    #  或者  request.respond(status_code=401)

          #  继续请求的处理
          await  self.next(request)
from  japronto  import  Application

app  =  Application()

#  将  AuthMiddleware  添加到应用中
app.add_middleware(AuthMiddleware)

#  ...  其他路由和处理器  ...

#  示例处理器,使用请求中的  user_info
@app.route('/protected')
async  def  protected(request):
      user_info  =  request.user_info
      if  user_info:
          #  如果请求中存在用户信息,则处理请求
          #  例如,返回用户信息
          return  json.dumps(user_info)
      else:
          #  如果没有用户信息,返回未授权
          return  request.Response(status_code=401)

#  程序入口
if  __name__  ==  '__main__':
      app.run(debug=True)
from  japronto  import  Application
from  apscheduler.schedulers.asyncio  import  AsyncIOScheduler
from  apscheduler.triggers.interval  import  IntervalTrigger
from  apscheduler.triggers.cron  import  CronTrigger
import  asyncio

app  =  Application()

#  假设  AuthMiddleware  是已经定义好的中间件
app.add_middleware(AuthMiddleware)

#  ...  其他路由和处理器  ...

@app.route('/protected')
async  def  protected(request):
      user_info  =  request.user_info
      if  user_info:
          return  json.dumps(user_info)
      else:
          return  request.Response(status_code=401)

#  定时任务
async  def  task_every_six_seconds():
      print("每6秒处理一次的任务")

async  def  task_every_thirty_three_minutes():
      print("每33分钟处理一次的任务")

async  def  task_daily_between_one_and_five():
      print("每天早上1点到5点之间处理的任务")

#  初始化调度器
scheduler  =  AsyncIOScheduler()

#  添加定时任务
scheduler.add_job(task_every_six_seconds,  IntervalTrigger(seconds=6))
scheduler.add_job(task_every_thirty_three_minutes,  IntervalTrigger(minutes=33))
#  每天凌晨1点到5点之间每分钟执行一次
scheduler.add_job(task_daily_between_one_and_five,  CronTrigger(hour=1,  minute=0,  end_hour=5,  end_minute=59))

async  def  main():
      #  启动调度器
      scheduler.start()

      #  启动  Japronto  应用
      app.run(debug=True)

      #  当  Japronto  应用停止时,等待定时任务完成
      await  scheduler.shutdown()

#  程序入口
if  __name__  ==  '__main__':
      asyncio.run(main())
pip  install  apscheduler
from  japronto  import  Application
from  japronto.middleware  import  Middleware
from  apscheduler.schedulers.asyncio  import  AsyncIOScheduler
from  apscheduler.triggers.interval  import  IntervalTrigger
from  apscheduler.triggers.cron  import  CronTrigger
import  asyncio
import  json

#  定义跨域中间件
class  CorsMiddleware(Middleware):
      def  __init__(self,  app):
          super().__init__(app)

      async  def  handle(self,  request):
          #  设置跨域资源共享的响应头
          response  =  await  self.app(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'
          response.headers['Access-Control-Allow-Credentials']  =  'true'
          return  response

app  =  Application()

#  添加跨域中间件
app.add_middleware(CorsMiddleware)

#  ...  其他路由和处理器  ...

@app.route('/protected')
async  def  protected(request):
      user_info  =  request.user_info
      if  user_info:
          return  json.dumps(user_info)
      else:
          return  request.Response(status_code=401)

#  定时任务
async  def  task_every_six_seconds():
      print("每6秒处理一次的任务")

async  def  task_every_thirty_three_minutes():
      print("每33分钟处理一次的任务")

async  def  task_daily_between_one_and_five():
      print("每天早上1点到5点之间处理的任务")

#  初始化调度器
scheduler  =  AsyncIOScheduler()

#  添加定时任务
scheduler.add_job(task_every_six_seconds,  IntervalTrigger(seconds=6))
scheduler.add_job(task_every_thirty_three_minutes,  IntervalTrigger(minutes=33))
#  每天凌晨1点到5点之间每分钟执行一次
scheduler.add_job(task_daily_between_one_and_five,  CronTrigger(hour=1,  minute=0,  end_hour=5,  end_minute=59))

async  def  main():
      #  启动调度器
      scheduler.start()

      #  启动  Japronto  应用
      app.run(debug=True)

      #  当  Japronto  应用停止时,等待定时任务完成
      await  scheduler.shutdown()

#  程序入口
if  __name__  ==  '__main__':
      asyncio.run(main())

 













标签:__,经验,app,request,japronto,item,async,def
From: https://www.cnblogs.com/pearlcity/p/17974979

相关文章

  • 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}}可以隐......
  • 15 万字稳定性提升经验:《2023 下半年最佳实践合集》限量申领!
    一分钟精华速览超30位专家共创,近20篇最佳实践,共计15万字。联合所有编写成员正式发布,限量赠送,即日起申领。(方式见文末)为什么整理行业最佳实践?大量实践证明,分布式系统稳定性的提升,不仅仅需要从技术工具发力,还涉及到组织、制度流程、人员能力等方方面面的问题。而每家企业......