首页 >> 大全

python 使用django库进行Web 开发(二)

2023-09-02 大全 22 作者:考证青年

如果获取信息成功,返回如下

{"ret": 0,"retlist": [{"address": "江苏省常州武进市白云街44号","id": 1,"name": "武进市 袁腾飞","phonenumber": "13886666666"},{"address": "北京海淀区","id": 4,"name": "北京海淀区代理 蔡国庆","phonenumber": "13990123456"}]              
}

函数

mgr/.py:

# 导入 Customer 
from common.models import Customerdef listcustomers(request):# 返回一个 QuerySet 对象 ,包含所有的表记录qs = Customer.objects.values()# 将 QuerySet 对象 转化为 list 类型# 否则不能 被 转化为 JSON 字符串retlist = list(qs)return JsonResponse({'ret': 0, 'retlist': retlist})

可以发现,无需转化数据为HTML, 后端的代码任务也大大减轻。

【2】 添加一个客户

mgr/.py:

def addcustomer(request):info    = request.params['data']# 从请求消息中 获取要添加客户的信息# 并且插入到数据库中# 返回值 就是对应插入记录的对象 record = Customer.objects.create(name=info['name'] ,phonenumber=info['phonenumber'] ,address=info['address'])

【3】修改客户信息

根据接口文档,修改客户数据接口,前端提供的数据格式如下

{"action":"modify_customer","id": 6,"newdata":{"name":"武汉市桥北医院","phonenumber":"13345678888","address":"武汉市桥北医院北路"}
}

mgr/.py:

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})

【4】删除客户

根据接口文档,删除客户数据接口,前端只需要提供要删除的客户的ID。

数据格式如下

{"action":"del_customer","id": 6
}

我们可以使用如下的函数来处理

mgr/.py:

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})

【5】临时取消 CSRF 校验

根据接口文档,添加客户 请求是个Post请求

POST /网站名/api/mgr/signin  HTTP/1.1
Content-Type:   application/x-www-form-urlencoded

注意,缺省创建的项目, 会启用一个 CSRF (跨站请求伪造) 安全防护机制。

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

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

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

与前端进行集成

python开发库存管理系统__库用于发布python包

最终终前端和后端系统会集成在一起成为一个完整的系统。

部署到生产环境(生产环境就是正式的线上运营环境)运行的架构往往比较复杂。

开发环境下, 前后端分离的架构如何简单集成。

前端环境其实就是 一些前端的代码和资源文件,包括 js文件、html文件、css文件 还有 图片视频文件等。

我们模拟前端团队开发的 前端 系统 打包在这里 ,点击这里下载

下载好以后,可以解压该 .zip 文件到项目根目录下面,形成一个目录 。

该目录下面就是前端的 代码资源文件。

的开发环境也可以从浏览器访问这些前端的资源文件。

但是前端文件都是静态文件,需要我们配置一下的配置文件, 指定http请求如果访问静态文件,在哪个目录下查找。

注意,接下来我们配置 静态文件服务, 是 开发时 使用的 一种 临时方案 ,性能很低,这是方便我们调试程序用的。

开发模式:

前面讲过,正式部署web服务的时候,不应该这样干,应该采用其它方法,比如Nginx等。后面的教程会有详细的讲解如何使用Nginx 和 组合使用。现在,请打开 /urls.py 文件,在末尾 添加一个

from django.contrib import admin
from django.urls import path, include
# 静态文件服务
from django.conf.urls.static import static# from sales.views import listorders
# python manage.py runserver 0.0.0.0:80
urlpatterns = [path('admin/', admin.site.urls),path('sales/', include('sales.urls')),path('api/mgr/', include('mgr.urls')),] + static("/", document_root="./z_dist")

在url 路由中加入 前端静态文件的查找路径。

访问

#/

3、处理登录、登出请求 处理登录、登出请求

我们可以在mgr目录里面创建一个代码文件 .py,用来处理管理员登录和登出 的API 请求的。

当我们执行 创建数据库表时,根据,就会为我们创建 用户表 ,如下所示

..auth 这个app 已经 为我们做好了登录验证功能。

我们只需要使用这个app库里面的方法就可以了。

的文档就给出了登录和登出代码范例,我们稍微修改一下。

mgr/.py

from django.http import JsonResponsefrom django.contrib.auth import authenticate, login, logout# 登录处理
def signin(request):# 从 HTTP POST 请求中获取用户名、密码参数userName = request.POST.get('username')passWord = request.POST.get('password')# 使用 Django auth 库里面的 方法校验用户名、密码user = authenticate(username=userName, password=passWord)# 如果能找到用户,并且密码正确if user is not None:if user.is_active:if user.is_superuser:login(request, user)# 在session中存入用户类型request.session['usertype'] = 'mgr'return JsonResponse({'ret': 0})else:return JsonResponse({'ret': 1, 'msg': '请使用管理员账户登录'})else:return JsonResponse({'ret': 0, 'msg': '用户已经被禁用'})# 否则就是用户名、密码有误else:return JsonResponse({'ret': 1, 'msg': '用户名或者密码错误'})# 登出处理
def signout(request):# 使用登出方法logout(request)return JsonResponse({'ret': 0})

创建 url路由

系统中,浏览器登陆登录页面的url是

但是这不是 登录 API接口的url路径。

根据接口,管理员登录的API 路径是 /api/mgr/

前面的课程, 我们已经在总路由文件/urls.py中 添加了如下路由记录

# 凡是 url 以 api/mgr  开头的,
# 都根据 mgr.urls 里面的 子路由表进行路由
path('api/mgr/', include('mgr.urls')),

现在,我们只需要 在mgr 目录下面 的子路由文件 urls.py 里添加如下内容

mgr/urls.py

from mgr import customer
from django.urls import path
# 添加如下内容
from mgr import sign_in_outurlpatterns = [path('customers', customer.dispatcher),# 添加如下内容path('signin', sign_in_out.signin),path('signout', sign_in_out.signout),
]

这样就表示:

如果有HTTP请求 url是/api/mgr/就由 .py 里面的 函数处理,

如果有HTTP请求 url是/api/mgr/ 就由 .py 里面的 函数处理。

测试 【1】代码测试:

密码错误:

import pprint
import requestspayload = {'username': 'admin','password': '88888888'
}response = requests.post('http://localhost/api/mgr/signin',data=payload)pprint.pprint(response.json())

密码正确:

payload = {'username': 'admin','password': '123456'
}

【2】界面测试:

成功直接跳转

【3】 测试

:极客专属的接口协作管理工具

官网:

关于我们

最火推荐

小编推荐

联系我们


版权声明:本站内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 88@qq.com 举报,一经查实,本站将立刻删除。备案号:桂ICP备2021009421号
Powered By Z-BlogPHP.
复制成功
微信号:
我知道了