前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django_rest框架实践项目(二) 为什么很少的代码就可以实现增删改查?rest框架如何实现分页?页面实现登录按钮?权限控制

Django_rest框架实践项目(二) 为什么很少的代码就可以实现增删改查?rest框架如何实现分页?页面实现登录按钮?权限控制

作者头像
一写代码就开心
发布2021-03-02 14:40:21
9120
发布2021-03-02 14:40:21
举报
文章被收录于专栏:java和python

之前已经创建了helloworld项目,并且我们只是写了很少的一点代码,就实现了对数据库的增删改查,为什么我们写了一点的代码,就可以实现增删改查呢?

之前的界面是

在这里插入图片描述
在这里插入图片描述

为什么很少的代码就可以实现增删改查?

因为rest框架的路由,我们看我们写的路由

在这里插入图片描述
在这里插入图片描述

就是这句代码实现了全部的功能,

代码语言:javascript
复制
  url(r'^', include(router.urls)),  # 使用路由对象,urls这个属性是固定的,
  # 其他项目里面也是这样写

我们在浏览器输入错误的地址,我们看看出现了什么

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
^admin/
^ ^users/$ [name='user-list']
^ ^users\.(?P<format>[a-z0-9]+)/?$ [name='user-list']
^ ^users/(?P<pk>[^/.]+)/$ [name='user-detail']
^ ^users/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$ [name='user-detail']
^ ^groups/$ [name='group-list']
^ ^groups\.(?P<format>[a-z0-9]+)/?$ [name='group-list']
^ ^groups/(?P<pk>[^/.]+)/$ [name='group-detail']
^ ^groups/(?P<pk>[^/.]+)\.(?P<format>[a-z0-9]+)/?$ [name='group-detail']
^ ^$ [name='api-root']
^ ^\.(?P<format>[a-z0-9]+)/?$ [name='api-root']
^api-auth/

出现了这么多的路由,我们看我们代码里面的路由

代码语言:javascript
复制
router = routers.DefaultRouter()    # 创建路由的对象
#  往对象里面加路径
router.register(r'users', views.UserViewSet)
router.register(r'groups', views.GroupViewSet)

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^', include(router.urls)),  # 使用路由对象
    url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),

]

以上的情况就充分的说明了,我们在代码里面用rest框架写一个路由,就相当于写了增删改查的4个路由,所以只需要简单的配置,项目就可以实现对数据库的增删改查。

经过以上的创建,就可以在启动项目后,在浏览器里面出现连接数据库的界面,

首先我们看到的就是根目录,这个就是我们urls.py里面的路径

在这里插入图片描述
在这里插入图片描述

这个是你在代码里面写了几个路径,这个界面就会显示几个路径,我们随便点开一个,在后台,这个就会走view里面的代码,有几个路径,view里面就有几个类,每一个类处理不同的路径。在view里面的类里面,会调用序列化里面的代码,也就是序列化里面我们引用的表,这样就可以在前端显示这些表的内容,可以对表进行增删改查。

===============================================================

在序列化文件里面,字段里面要写对应表里面的字段,如果有多对多的两个表,会存在第三个表,比如user表和group表。会存在第三个表user_group表。那么在group表里面要显示这个组里面的全部的用户,那么就可以在group序列化代码里面添加一个字段’user_set’ 可以理解为外键的意思,记住格式就是这样写的。 在user表里面要显示这个用处于哪个组,直接写字段groups ,默认就是这样写 user_set groups 默认

分页功能

现在我们在rest框架浏览器页面查看,会将数据都展示,但是我们想要实现分页,如何实现。

分页:

在前段的用户表里面,如果数据库用户表里面的数据是比较的多的,那么会都在一页显示出来,这个是非常的浪费系统的资源的,所以现在需要制作分页。具体步骤如下:

在setting文件的最底下,要写这样的代码 注意是大写

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
REST_FRAMEWORK = {
# 新版本必须写下面的话
    'DEFAULT_PAGINATION_CLASS':'rest_framework.pagination.PageNumberPagination',
    'PAGE_SIZE': 3,
}
在这里插入图片描述
在这里插入图片描述

对,只要在setting里面配置了那个,那么在浏览器页面就会出现分页的按钮。

实现登录按钮

我们现在看我们的页面

在这里插入图片描述
在这里插入图片描述

顶部什么也没有,现在我们配置一下路由

在这里插入图片描述
在这里插入图片描述

要实现登录的按钮,那么在url里面要加一句代码 api-auth这个名字是随便起的,后面就是规定好的 url(r’^api-auth/’, include(‘rest_framework.urls’, namespace=‘rest_framework’)), 这样就会在前段页面显示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

权限控制

这个也是在setting里面设置全局的权限控制,只要不登录,什么也做不了

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
    'DEFAULT_PERMISSION_CLASSES': [   #这个代码就是控制后台用户的权限
        'rest_framework.permissions.IsAdminUser',
    ],

写了以上的代码,我们在浏览器没有登录,那么我们看到的就是这样

在这里插入图片描述
在这里插入图片描述

以上的意思就是你没有权限。

其实我们在这个里面之前创建的用户都没有设置密码,那么这个时候我们可以利用超级用户登录到admin后台给这些用户设置密码。这些用户登录之后,还是没有权限看数据库里面的东西。

所以以上代码的意思就是只有管理员的身份才可以查看数据库里面的东西,而且因为是在setting里面设置的,所以是全局设置。对所有的view都管用。

总结

setting

对于rest框架,在setting设置的时候,所有 的东西都是在REST_FRAMEWORK 里面进行设置,后面就是字典。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/02/08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 为什么很少的代码就可以实现增删改查?
  • 分页功能
  • 实现登录按钮
  • 权限控制
  • 总结
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档