首页>>后端>>Python->django为什么不整合drf(2023年最新整理)

django为什么不整合drf(2023年最新整理)

时间:2023-12-14 本站 点击:0

导读:很多朋友问到关于django为什么不整合drf的相关问题,本文首席CTO笔记就来为大家做个详细解答,供大家参考,希望对大家有所帮助!一起来看看吧!

django drf_yasg 非restful风格的api怎么在swagger上展示?

使用Swagger

Swagger 是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。

在web api 使用swagger可以说非常简单,不需要编写任何代码,完全依赖于插件。具体步骤如下:

  1.新建一个web api项目

2.使用nuget添加Swashbuckle包

3.完成

没错,就是这么简单!运行项目,转到地址 会看到如下页面,这是默认添加的两个apicontroller:

这个时候接口还没有具体的描述信息等,例如我们给ValuesController.Get添加注释描述,在页面上还是没有显示出来。需要按照如下步骤实现:

1. 在app_start 下 SwaggerConfig 大100行的位置找到 //c.IncludeXmlComments(GetXmlCommentsPath()); 如下注释,改为:c.IncludeXmlComments(GetXmlCommentsPath(thisAssembly.GetName().Name)); (注意去掉注释了)

2. 在SwaggerConfig添加一个方法代码:

1

2

3

4

protected static string GetXmlCommentsPath(string name)

{

return string.Format(@"{0}\bin\{1}.XML", AppDomain.CurrentDomain.BaseDirectory, name);

}

3. 修改项目生成,在bin下对应的xml文件可以看到具体的描述文档,如下:

重新生成项目,就要可以看到完整的接口描述了。例如我们心中一个TestController如下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

/// summary

/// 测试控制器

/// /summary

public class TestController : ApiController

{

/// summary

/// 测试Get方法

/// /summary

/// remarks测试Get方法/remarks

/// returns/returns

[HttpGet]

public string Get()

{

return "Get";

}

/// summary

/// 测试Post方法

/// /summary

/// param name="name"姓名/param

/// param name="age"年龄/param

/// remarks测试Post方法/remarks

/// returns/returns

[HttpPost]

public string Post(string name, int age)

{

return name + age.ToString();

}

}

生成的页面如下,可以看到接口的描述,点击Try it out 即可调用:

三、非依赖代码

上面的方式依赖于Swashbuckle包,它已经包含了Swagger-UI组件。我们的代码需要引入这个包,实际上也可以不需要在项目中引入,单独部署Swagger,包括Swagger-Ui(api展示) 和 Swagger-Editor(在线编辑器),它需要依赖nodejs环境,所以需要先按照nodejs。部署其实也很简单,例如这是我部署的结果:

swagger-editor:

swagger-ui:

编辑后只需要将文件保存为json文件,然后拷贝到指定的目录即可。这个部署也非常简单,具体可以参照:

django-redis结合drf实现缓存

一、django_redis

1. django-redis 基于 BSD 许可, 是一个使 Django 支持 Redis cache/session 后端的全功能组件.

二、django-redis自身优点:

● 持续更新

● 本地化的 redis-py URL 符号连接字符串

● 可扩展客户端

● 可扩展解析器

● 可扩展序列器

● 默认客户端主/从支持

● 完善的测试

● 已在一些项目的生产环境中作为 cache 和 session 使用

● 支持永不超时设置

● 原生进入 redis 客户端/连接池支持

● 高可配置 ( 例如仿真缓存的异常行为 )

● 默认支持 unix 套接字

● 支持 Python 2.7, 3.4, 3.5 以及 3.6

三、推荐使用版本

四、django_redis基本的使用操作:

五、在django项目中的配置格式

六、自定义redis的工具类

七、自定义redis key协议

八、视图调用缓存

django+vue前后端分离项目部署

后端用的drf,使用的是uwsgi+nginx

进入服务器项目文件目录下,我的django项目放在了“/usr/myProjects/”目录下了。在manage.py同级目录下创建uwsgi.ini文件,配置如下:

测试效果命令:

如果访问:xxx.xxx.xxx.xx:8000 成功, 则uwsgi.ini配置成功

我的nginx.conf所在位置是“/etc/nginx/nginx.conf”

配置文件如下:

1、第一行

主要就是给nginx加权限,vue部署后使用history路由时会去掉地址后面的‘#’号,打包部署后不加权限会有bug。

2、如配置所示,有两个Server,分别部署了前端服务,和后端服务,值得注意的是两个Server用的是同一个服务器,监听的端口不同。

3、vue部署需要注意的是反向代理地址:

以及后面的端口问题

4、后端的Server需要注意location中的uwsgi_pass 后面的端口号要和uwsgi.ini中配的相同,否则监听不到

5、后端跨域问题。如果遇到跨域需要自己网上找配置,我的没遇到,可能是因为我在django的settings中配置了跨域。

6、django-suit后台管理样式崩了,需要改,但是api可以正常访问,这个有空再说

7、我开始后台监听的是8008端口,vue前端监听的是80端口,这样前端显示好看。然而问题出现了,虽然后台api可以正常访问,vue的本地开发环境也能正常运行且文字、图片资源均显示正常,但是前端vue打包线上部署后,文字信息显示正常,图片信息缺失8008端口,导致显示不出来。为图方便我选择了前端监听8008端口,后端监听80,部署后显示正常。原因不太清楚///////有空再说吧。

8、不要问我为啥都前后端分离了还部署到一个服务器上?穷,而且只是测试,没必要

9、此文仅适合入门

关于django后台admin(suit)缺失的修改(参考:django中文网: )

在环境中进入项目目录,需要收集css样式,在终端输入命令:

接下来你就回发现static文件中包含了css文件,此时再打开网站,样式显示正常

uWSGI 通过 xxx.ini 启动后会在相同目录下生成一个 xxx.pid 的文件,里面只有一行内容是 uWSGI 的主进程的进程号。

关于uwsgi,进入同届目录下

教训

获取不到环境,那就指定环境

另外:记得重启uwsgi,重启Nginx,实在不行就先把监听的端口kill掉再重启

暴力删端口:fuser -k 80/tcp

netstat -aptn命令行,查看所有开启的端口号

netstat -ntlp | grep 80 查看具体的端口是否使用

ps -ef | grep uwsgi 查看是否有uwsgi端口存在

结语:以上就是首席CTO笔记为大家介绍的关于django为什么不整合drf的全部内容了,希望对大家有所帮助,如果你还想了解更多这方面的信息,记得收藏关注本站。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:/Python/33576.html