python搭建网站《三》

接上一章、数据库的基本操作我们已经会了、但是还要熟练运用

前面我们已经为 销售员用户 专门创建了一个应用 sales 来处理相关的 请求。


所以,我们可以 再为 管理员用户 专门创建一个应用 mgr 来处理相关的 请求。 怎么创建还记得吗?


对了,执行


python manage.py startapp mgr 


python搭建网站《三》


python搭建网站《三》


我是直接用pycharm编辑器里的终端来执行命令的、也可以在CMD执行


创建mgr 这个APP后、还要再建一个customer.py文件


python搭建网站《三》


python搭建网站《三》


import json
from django.http import JsonResponse
from common.models import Customer
import common.models


def dispatcher(request):
    # 将请求参数统一放入request的params属性中,方便后续处理

    # GET请求 参数在url中,同时request对象的GET属性获取
    if request.method == 'GET':
        request.params = request.GET

    # POST/PUT/DELETE(添加、修改、删除、上面GET是查询)4种请求参数从request对象的body属性中获取
    elif request.method in ['POST', 'PUT', 'DELETE']:
        # 根据接品、POST/PUT/DETELE请求的消息体都是json格式
        request.params = json.loads(request.body)

    # 根据不同的action分派给不同的函数进行处理
    action = request.params['action']
    if action == 'list_customer':       #如果{action:list_customer}就执行listcustomers函数
        return listcustomers()          # 列出客户函数、这个函数在下面创建
    elif action == 'add_customer':
        return addcustomers(request)    # 添加客户函数
    elif action == 'modify_customer':
        return modifycustomer(request)  # 修改客户函数
    elif action == 'del_customer':
        return deletecustomer(request)  # 删除客户函数

    else:
        return JsonResponse({'ret': 1, 'msg': '不支持该类型的http请求'})


#查询API
def listcustomers():
    # 返回一个 QuerySet 对象 ,包含所有的表记录
    qs = common.models.Customer.objects.values()  # 这个函数是从common这个APP里的models.py文件里的类属性、也可以用from\import先导入APP

    # 然后把上面的类属性转化为list(列表)、否则不能在网页上转化为json字符串
    retlist = list(qs)

    return JsonResponse({'ret': 0, 'retlist': retlist})  # 返回给接口里的那2个字典元素、分别是ret、retlist(上面转化为listr的变量)


#添加API
def addcustomers(request):
    info = request.params['data']

    # 从请求消息中获取要添加客户的信息
    # 并且插入到数据库中
    # 返回值就是对应插入记录的对象

    record = common.models.Customer.objects.create(name=info['name'],           # 这个函数是从common这个APP里的models.py文件里的类属性\每个字段对应这个类里的变量
                                                   phonenumber=info['phonenumber'],
                                                   address=info['address']
                                                   )

    return JsonResponse({'ret': 0, 'id': record.id})  # 返回给接口的那2个字典元素,分别是ret、id(因为ID是动态自增长的、又要返回上面的变量).点name就是name这个字段


#修改API
def modifycustomer(request):
    # 从请求消息中 获取修改客户的信息
    # 找到该客户,并且进行修改操作

    customerid = request.params['id']
    newdata = request.params['newdata']

    try:
        # 根据 id 从数据库中找到相应的客户记录
        customer = Customer.objects.get(id=customerid)
    except Customer.DoesNotExist:
        return {
            'ret': 1,
            'msg': f'id 为`{customerid}`的客户不存在'
        }

    if 'name' in newdata:
        customer.name = newdata['name']
    if 'phonenumber' in newdata:
        customer.phonenumber = newdata['phonenumber']
    if 'address' in newdata:
        customer.address = newdata['address']

    # 注意,一定要执行save才能将修改信息保存到数据库
    customer.save()

    return JsonResponse({'ret': 0})

#删除API
def deletecustomer(request):

    customerid = request.params['id']

    try:
        # 根据 id 从数据库中找到相应的客户记录
        customer = Customer.objects.get(id=customerid)
    except Customer.DoesNotExist:
        return  {
                'ret': 1,
                'msg': f'id 为`{customerid}`的客户不存在'
        }

    # delete 方法就将该记录从数据库中删除了
    customer.delete()
    return JsonResponse({'ret': 0})

注意上面


addcustomers函数里的ID是缺省字段,缺省创建的项目, Django 会启用一个 CSRF (跨站请求伪造) 安全防护机制。


在这种情况下, 所有的Post、PUT 类型的 请求都必须在HTTP请求头中携带用于校验的数据。


为了简单起见,我们先临时取消掉CSRF的 校验机制,等以后有需要再打开。


要临时取消掉CSRF的 校验机制,非常简单,只需要在 项目的配置文件 bysms/settings.py 中 MIDDLEWARE 配置项 里 注释掉 ‘django.middleware.csrf.CsrfViewMiddleware’ 即可。


python搭建网站《三》


python搭建网站《三》

​今天由于事多、就暂时先到这吧、持续关注我

发表评论
留言与评论(共有 0 条评论) “”
   
验证码:

相关文章

推荐文章