之前已经创建了helloworld项目,并且我们只是写了很少的一点代码,就实现了对数据库的增删改查,为什么我们写了一点的代码,就可以实现增删改查呢?
之前的界面是
因为rest框架的路由,我们看我们写的路由
就是这句代码实现了全部的功能,
url(r'^', include(router.urls)), # 使用路由对象,urls这个属性是固定的,
# 其他项目里面也是这样写
我们在浏览器输入错误的地址,我们看看出现了什么
^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/
出现了这么多的路由,我们看我们代码里面的路由
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文件的最底下,要写这样的代码 注意是大写
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里面设置全局的权限控制,只要不登录,什么也做不了
'DEFAULT_PERMISSION_CLASSES': [ #这个代码就是控制后台用户的权限
'rest_framework.permissions.IsAdminUser',
],
写了以上的代码,我们在浏览器没有登录,那么我们看到的就是这样
以上的意思就是你没有权限。
其实我们在这个里面之前创建的用户都没有设置密码,那么这个时候我们可以利用超级用户登录到admin后台给这些用户设置密码。这些用户登录之后,还是没有权限看数据库里面的东西。
所以以上代码的意思就是只有管理员的身份才可以查看数据库里面的东西,而且因为是在setting里面设置的,所以是全局设置。对所有的view都管用。
setting
对于rest框架,在setting设置的时候,所有 的东西都是在REST_FRAMEWORK 里面进行设置,后面就是字典。