DRF架构预习

什么是DRF架构

DRF: (django rest framework)

restframework

restframework是django对restful架构扩展的第三方库

restful架构

主要原则

1.网络上的所有事物都被抽象成为资源
2.每个资源都有唯一的资源标识符
3.同一个资源具有多种表现形式(xml, json等)
4.对资源的各种操作不会修改资源标识符
5.所有操作均是无状态的
6.符合REST原则的架构

什么是restful

对应的中文是rest式的;Restful web service是一种常见的rest的应用,是遵守了rest风格的web服务,rest式的web服务是一种ROA(面向资源架构)

如何使用

http方法资源操作幂等安全
GETSELECT
POSTINSERT
PUTUPDATE
DELETEDELETE

注释: 幂等性:对同一个接口的多次访问,得到的资源状态是相同的。
安全性:对该REST 接口访问,不会使服务端资源状态发生改变

DRF的基本配置

安装第三方包

在这里插入图片描述

添加应用

在项目的同名文件夹下色settings.py文件中配置下面信息
在这里插入图片描述

序列化和反序列化

序列化:将模型数据转化成json数据
反序列化:将接收到的json数据转化成模型

JsonResponse(data_list, safe=False, json_dumps_params={'ensure_ascii': False})
# 第一个参数是json数据,默认要是dict,
# 第二个参数设置为False可以传json
# 第三个参数是设置中文编码格式
return JsonResponse(data_list, safe=False, json_dumps_params={'ensure_ascii': False})

json.dumps和json.loads函数

1、json.dumps()和json.loads()是json格式处理函数 (json,是一种数据格式可以理解为json是字符串)
  (1)json.dumps()函数是将一个Python数据类型列表进行json格式的编码.即json.dumps()函数是将字典转化为字符串)
  (2)json.loads()函数是将json格式数据转换为字典.即:json.loads()函数是将字符串转化为字典
2.json.dump()和json.load()主要用来读写json文件函数

import json

newdict = {'a': 1,'b' :2}
print(type(newdict))
#字典转为字符串
data_dumps = json.dumps(newdict)
print(type(data_dumps))
#字符串转为字典
data_json = json.loads(data_dumps)
print(type(data_json))

输出:

<class 'str'>
<class 'dict'>

前端用ajax传递数据到后端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="jquery-1.12.4.min.js"></script>
    <script>
        $(function () {
            $('#btn').click(function () {
                var data = {
                    'name':'李五',
                    'city':'北京'
                };
                alert('ok')
                #字典转化为字符串
                data = JSON.stringify(data)
                alert('ok123')
                #在控制台显示数据,调试用
                #console.log(data)
                $.ajax({
                    url:'http://127.0.0.1:8000/user/userinfo/',
                    type:'post',
                    data:data,
                    success:function () {
                        alert('提交数据成功')

                    },
                    error:function () {
                        alert('123')
                    }
                })
            })
        })
    </script>
</head>
<body>
<button id="btn">提交数据</button>
</body>
</html>

后端接受数据并解析存进数据库

# 继承于django.view:View
class UserInfos(View):
    # 返回所有的get请求,这里返回用户信息
    def get(self, request):
        userobj_list = UserInfo.objects.all()
        print(userobj_list)
        data_list = []
        for userobj in userobj_list:
            dictnew = {
                'id': userobj.id,
                'username': userobj.name
            }
            data_list.append(dictnew)

        # 第一个参数是json数据,默认要是dict,
        # 第二个参数设置为False可以传json
        # 第三个参数是设置中文编码格式
        return JsonResponse(data_list, safe=False, json_dumps_params={'ensure_ascii': False})
        
	# POST请求时调用这个方法
    def post(self, request):
    	# 先打印看看是什么
        print('###################3')
        print(request.body)
        # 获取到前段传递过来的ajax请求
        data_byte = request.body
        # 将传递过来的ajax的byte类型的数据转成str字符串
        data_str = data_byte.decode()
        # 获取用户名
        print(data_str)
        # 转成字典类型
        # data_str = "[{'name': 'lier', 'country':'us'}]"
        data_json = json.loads(data_str)
        print('%%%%%%%%%%%%%%%%%%%%%%')
        print(data_json)
        # 因为存在外键,先创建地址数据库对象,然后赋值给用户信息的地址外键
        try:
        	# 先判断有没有存在,没有则创建
            add_obj = AddressInfo.objects.get(add=data_json.get('add'))
        except:
            add_obj = AddressInfo.objects.create(add=data_json.get('add'))
        finally:
            UserInfo.objects.create(name=data_json.get('name'), phone=data_json.get('phone'), addkey=add_obj)
        # 外键也可以用xx_id设置数字来设置
        # UserInfo.objects.create(name=data_json.get('name'), phone=data_json.get('phone'), addkey_id=1)
        return HttpResponse('ok')

    def show(self, request):
        return render(request, 'postdata.html')

在urls.py文件配置跳转逻辑:

from django.conf.urls import url
from user.views import *

urlpatterns = [
    url(r'^userinfo/', UserInfos.as_view(),
]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值