jjzjj

Python系列-Django-Ninja

在下杨六郎 2023-04-03 原文

Python系列-Django-Ninja

适用对象:有一定python和django基础,对此技术感兴趣,或者想快速尝试、实现效果的。
原则:

  • 实用为主,效果为主
  • 不重复造轮子,但应该知道其工作原理
  • 官网是最好的教程,其它只是辅助

ninja介绍

Django Ninja 是一个使用 Django 和 Python 3.6+ 类型提示构建 API 的 Web 框架。
官网地址

  • 做记录,加强记忆和总结经验
  • 为什么做这个教程:新技术,目前国内外针对这个库所出的教程还比较少

ninja的基本使用

安装

pip install django
pip install django-ninja

基本使用

实现最基本的hello world
参考教程,官网

  • 创建一个目录(例如project)存放工程
  • 创建django工程:django-admin startproject myproject
  • 在myproject/urls.py的同级目录里创建api.py,按照官网教程分别在api.py和urls.py里写入代码
  • 运行工程:python manage.py runserver

或者参考视频教程

ninja的解析输入

参考教程,官网
或者参考视频教程

  • 来自查询字符串的输入
    例如:http://127.0.0.1:8000/api/hello?name=Ninja,get请求用“?”号和指定参数拼接的方式
  • 默认值
    当没有输入指定参数时的返回值
  • 输入类型
    对参数输入做类型校验,不符合校验则作拦截
  • 从路径输入
    自定义路径输入
  • 来自请求正文的输入
    post请求
  • 自记录 API文档
    超级实用的自带功能,可以根据写好的api接口自动生成文档,可以查看、测试。
    http get post方法介绍
    为什么示例中post方法会报405:不允许静态文件响应POST请求

ninja的处理响应

参考教程,官网
或者参考视频教程
同步数据库:python manage.py migrate
创建一个用户:python manager.py createsuperuser

  • 定义响应模式
    @api.get("/me", response=UserSchema)
  • 多种响应类型
    ``@api.get(“/me”, response={200: UserSchema, 403: Error})

ninja的增删改查

CRUD——创建 、检索、更新、删除是持久化存储的四个基本功能。
参考教程,官网
或者参考视频教程

  • 创建一个新的app:
    python .\manage.py startapp employee
  • 注册:在xxmyproject\settings.py中添加:
  • 在employee目录下新建api.py
  • 添加路由
  • 同步数据库
  • 检测你对模型文件的修改,并且把修改的部分储存为一次迁移 python manage.py makemigrations
  • 数据库里创建新定义的模型的数据表 python manage.py migrate
  • vscode查看sqlite数据库的插件 SQLite

异常情况

  • 如果有外键,一定要添加on_delete=models.CASCADE,否则会报错
    models.ForeignKey(Department, on_delete=models.CASCADE)
  • 报错django.db.utils.IntegrityError: FOREIGN KEY constraint failed
    解决办法:
    其他推荐答案
    尝试将False的db_constraint的名称参数设置为False(默认情况下,其True)如下:
    status = models.ForeignKey(Status, on_delete=models.PROTECT,db_constraint=False)

有关Python系列-Django-Ninja的更多相关文章

  1. python - 如何使用 Ruby 或 Python 创建一系列高音调和低音调的蜂鸣声? - 2

    关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭4年前。Improvethisquestion我想在固定时间创建一系列低音和高音调的哔哔声。例如:在150毫秒时发出高音调的蜂鸣声在151毫秒时发出低音调的蜂鸣声200毫秒时发出低音调的蜂鸣声250毫秒的高音调蜂鸣声有没有办法在Ruby或Python中做到这一点?我真的不在乎输出编码是什么(.wav、.mp3、.ogg等等),但我确实想创建一个输出文件。

  2. ruby-on-rails - 使用一系列等级计算字母等级 - 2

    这里是Ruby新手。完成一些练习后碰壁了。练习:计算一系列成绩的字母等级创建一个方法get_grade来接受测试分数数组。数组中的每个分数应介于0和100之间,其中100是最大分数。计算平均分并将字母等级作为字符串返回,即“A”、“B”、“C”、“D”、“E”或“F”。我一直返回错误:avg.rb:1:syntaxerror,unexpectedtLBRACK,expecting')'defget_grade([100,90,80])^avg.rb:1:syntaxerror,unexpected')',expecting$end这是我目前所拥有的。我想坚持使用下面的方法或.join,

  3. Python 相当于 Perl/Ruby ||= - 2

    这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Pythonconditionalassignmentoperator对于这样一个简单的问题表示歉意,但是谷歌搜索||=并不是很有帮助;)Python中是否有与Ruby和Perl中的||=语句等效的语句?例如:foo="hey"foo||="what"#assignfooifit'sundefined#fooisstill"hey"bar||="yeah"#baris"yeah"另外,类似这样的东西的通用术语是什么?条件分配是我的第一个猜测,但Wikipediapage跟我想的不太一样。

  4. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  5. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  6. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  7. python - 如何读取 MIDI 文件、更改其乐器并将其写回? - 2

    我想解析一个已经存在的.mid文件,改变它的乐器,例如从“acousticgrandpiano”到“violin”,然后将它保存回去或作为另一个.mid文件。根据我在文档中看到的内容,该乐器通过program_change或patch_change指令进行了更改,但我找不到任何在已经存在的MIDI文件中执行此操作的库.他们似乎都只支持从头开始创建的MIDI文件。 最佳答案 MIDIpackage会为您完成此操作,但具体方法取决于midi文件的原始内容。一个MIDI文件由一个或多个音轨组成,每个音轨是十六个channel中任何一个上的

  8. 「Python|Selenium|场景案例」如何定位iframe中的元素? - 2

    本文主要介绍在使用Selenium进行自动化测试或者任务时,对于使用了iframe的页面,如何定位iframe中的元素文章目录场景描述解决方案具体代码场景描述当我们在使用Selenium进行自动化测试的时候,可能会遇到一些界面或者窗体是使用HTML的iframe标签进行承载的。对于iframe中的标签,如果直接查找是无法找到的,会抛出没有找到元素的异常。比如近在咫尺的例子就是,CSDN的登录窗体就是使用的iframe,大家可以尝试通过F12开发者模式查看到的tag_name,class_name,id或者xpath来定位中的页面元素,会抛出NoSuchElementException异常。解决

  9. 阿里云RDS——产品系列概述 - 2

    基础版云数据库RDS的产品系列包括基础版、高可用版、集群版、三节点企业版,本文介绍基础版实例的相关信息。RDS基础版实例也称为单机版实例,只有单个数据库节点,计算与存储分离,性价比超高。说明RDS基础版实例只有一个数据库节点,没有备节点作为热备份,因此当该节点意外宕机或者执行重启实例、变更配置、版本升级等任务时,会出现较长时间的不可用。如果业务对数据库的可用性要求较高,不建议使用基础版实例,可选择其他系列(如高可用版),部分基础版实例也支持升级为高可用版。基础版与高可用版的对比拓扑图如下所示。优势 性能由于不提供备节点,主节点不会因为实时的数据库复制而产生额外的性能开销,因此基础版的性能相对于

  10. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

随机推荐