目录

  • 1、一些准备工作

    • 安装django
    • 创建django项目
    • 创建博客应用(app)
  • 2、models.py
  • 3、django admin
    • 登录
    • 创建超级用户
  • 4、修改urls.py
  • 5、新增文章接口
  • 6、查询文章接口
  • 7、修改文章接口
  • 8、删除文章接口
  • 9、鉴权
    • 鉴权接口
    • 用户认证


1、一些准备工作

安装django

pip install django

创建django项目

进入项目代码存放目录执行命令:

django-admin.py startproject blog_demo

进入blog_demo,运行命令:

python3.6 manage.py runserver 9000

在浏览器地址栏打开:http://127.0.0.1:9000/ 如果出现以下画面,则说明服务器正在运行

创建博客应用(app)

django中每一个app可以看作是一个模块,以app为单位,结构清晰,方便管理。

python3.6 manage.py startapp blog_api

使用开发工具打开项目blog_demo,其结构如下:

2、models.py

编写模型层代码,以下语句相当于创建了两张表:User,Article

class User(models.Model):id = models.AutoField(primary_key=True)uname = models.CharField(max_length=50)upwd = models.CharField(max_length=100)#active inactivestatus = models.CharField(max_length=10)class Article(models.Model):id = models.AutoField(primary_key=True)title = models.CharField(max_length=50)content = models.TextField()#deleted alivestatus = models.CharField(max_length=10)

创建表结构:

python3.6  manage.py migrate

settings.py文件INSTALLED_APPS处新增app:blog_api

INSTALLED_APPS = ['django.contrib.admin','django.contrib.auth','django.contrib.contenttypes','django.contrib.sessions','django.contrib.messages','django.contrib.staticfiles','blog_api'
]

让django知道模型有了变化:

python3.6 manage.py makemigrations blog_api

再次创建表结构:

python3.6  manage.py migrate

3、django admin

登录

在浏览器控制台输入:http://127.0.0.1:9000/admin/login/?next=/admin/

创建超级用户

stephen@stephen-K55VD:~/IdeaProjects/blog_demo$ python3.6 manage.py  createsuperuser
Username (leave blank to use 'stephen'): admin
Email address:
Password:
Password (again):
This password is too common.
Bypass password validation and create user anyway? [y/N]: y
Superuser created successfully.

邮件地址可以不填,注册成功后即可登录。使用admin后台来管理模型需要先注册,修改blog_api/admin.py代码

#导入模型User,Article
from blog_api.models import User,Articleadmin.site.register(User)
admin.site.register(Article)

刷新admin后台,就可以看到刚刚注册的模型了。

4、修改urls.py

from  blog_api.views import add_article,modify_article
urlpatterns = [path('admin/', admin.site.urls),path('articles/',add_article),path('articles/<int:art_id>',modify_article)
]

5、新增文章接口

from django.http import HttpResponse,JsonResponse
from blog_api.models import User,Article
import json#新增文章
def add_article(request):if request.method == "POST":req = json.loads(request.body)print (req)key_flag = req.get("title") and req.get("content") and len(req)==2#判断请求体是否正确if key_flag:title = req["title"]content = req["content"]#title返回的是一个listtitle_exist = Article.objects.filter(title=title)#判断是否存在同名titleif len(title_exist) != 0:return JsonResponse({"status":"BS.400","msg":"title aleady exist,fail to publish."})'''插入数据'''add_art = Article(title=title,content=content,status="alive")add_art.save()return JsonResponse({"status":"BS.200","msg":"publish article sucess."})else:return  JsonResponse({"status":"BS.400","message":"please check param."})

使用postman工具调用接口,运行结果:

6、查询文章接口

#查询所有文章和状态if request.method == "GET":articles = {}query_art = Article.objects.all()for title in query_art:articles[title.title] = title.statusreturn JsonResponse({"status":"BS.200","all_titles":articles,"msg":"query articles sucess."})

运行结果:

7、修改文章接口

#修改文章
def modify_article(request,art_id):if request.method == "POST":req = json.loads(request.body)try:art = Article.objects.get(id=art_id)key_flag = req.get("title") and req.get("content") and len(req)==2if key_flag:title = req["title"]content = req["content"]title_exist = Article.objects.filter(title=title)if len(title_exist) > 1:return JsonResponse({"status":"BS.400","msg":"title aleady exist."})'''更新数据'''old_art = Article.objects.get(id=art_id)old_art.title = titleold_art.content = contentold_art.save()return JsonResponse({"status":"BS.200","msg":"modify article sucess."})except Article.DoesNotExist:return  JsonResponse({"status":"BS.300","msg":"article is not exists,fail to modify."})

运行结果:

8、删除文章接口

#删除文章if request.method == "DELETE":try:art = Article.objects.get(id=art_id)art_id = art.idart.delete()return JsonResponse({"status":"BS.200","msg":"delete article sucess."})except Article.DoesNotExist:return JsonResponse({"status":"BS.300","msg":"article is not exists,fail to delete."})

运行结果:

9、鉴权

四个简单的接口已经可以运行了,但是在发请求之前没有进行鉴权,毫无安全性可言。下面来实现简单的认证机制。需要用到内建模块hashlib,hashlib提供了常见的摘要算法,如MD5,SHA1等。

鉴权接口

新增一个专门用于鉴权的接口。在urls.py中添加

 path("auth/",get_token)

在views.py前面新增函数get_token(request)

import hashlib#获取token
def get_token(request):req = json.loads(request.body)uname = req["username"]upwd = req["password"]if request.method == "POST":try:tmppwd =User.objects.get(uname=uname).upwdif upwd == tmppwd:md5 = hashlib.md5()#把密码变成一个长度固定的字符串md5.update(upwd.encode("utf-8"))return JsonResponse({"status":"BS.201","X-Token":md5.hexdigest()})else:return JsonResponse({"status":"BS.401","msg":"username or password may wrong."})except User.DoesNotExist:return JsonResponse({"status":"BS.500","msg":"username is not exist."})

登录django admin在blog_api下的User表新增一条记录。运行结果:

用户认证

request.META.get(“header key”) 用于获取header的信息。注意的是header key必须增加前缀HTTP,同时大写,中划先会转成下划线,例如你的key为X-Token,那么应该写成request.META.get("HTTP_X_TOKEN"),修改views.py在get_token后面加上如下代码:

#认证动作
def user_auth(request):token = request.META.get("HTTP_X_TOKEN",b'')print (token)if token:#暂时先写上auth接口返回的数据if token=="0a6db4e59c7fff2b2b94a297e2e5632e":return "auth_sucess"else:return "auth_fail"else:return  "auth_fail"

在接口中调用user_auth函数,以发布文章接口为例:

#新增文章
def add_article(request):auth_res = user_auth(request)if auth_res == "auth_fail":return JsonResponse({"status":"BS.401","msg":"user auth failed."})else:if request.method == "POST":req = json.loads(request.body)print (req).......

再次使用postman工具调用新增文章接口,Header中没有X-Token或X-Token错误时的运行结果:

转载于:https://www.cnblogs.com/webDepOfQWS/p/10693152.html

使用Django开发简单接口:文章增删改查相关推荐

  1. resultset mysql_MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...

    [声明] 欢迎转载,但请保留文章原始出处→_→ [正文] 一.ResultSet接口的介绍: 对数据库的查询操作,一般需要返回查询结果,在程序中,JDBC为我们提供了ResultSet接口来专门处理查 ...

  2. MySQL数据库学习笔记(九)----JDBC的ResultSet接口(查询操作)、PreparedStatement接口重构增删改查(含SQL注入的解释)...

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  3. Mybatis实现简单的数据库增删改查操作

    简介: MyBatis 是支持定制化 SQL.存储过程以及高级映射的优秀的持久层框架.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以对配置和原生Ma ...

  4. java增删改查实例源码_Spring Data JPA 实现简单的CRUD增删改查源码案例

    Spring专题 Spring Data JPA 实现简单的CRUD增删改查源码案例 Spring Data JPA旨在简化JPA基础知识库构建和减少需要与数据库进行通信的代码量.第一部分是如何配置H ...

  5. Django实现对数据库数据增删改查(二)

    目录 1.基本框架 1.1.路由分发 1.2.视图函数-逻辑处理 1.3.模板 2.查询功能 2.1.视图函数 2.2.模板函数 3.添加功能 3.1.路由分发 3.2视图函数 3.3.模板 4.编辑 ...

  6. javaweb简单的登录增删改查系统_利用python操作小程序云数据库实现简单的增删改查!

    不止python,你可以利用任何语言那实现通过http请求来操作你自己的小程序云数据库了 背景 也是在最近吧,小程序更新了云开发 HTTP API 文档,提供了小程序外访问云开发资源的能力,使用 HT ...

  7. .net Api 接口调用 增删改查

    .net Api项目搭建内容以前已经说过了,文章链接,这篇文章在已经搭建好项目基础上简单说下如何建立API增删改查接口. 在Models中建立一个实体类: namespace ApiTest.Mode ...

  8. jqGrid+FastJson+MybatisPlus快速开发分页排序和增删改查。

    框架介绍 jqGrid :是一个在jquery基础上做的一个表格控件,以ajax的方式和服务器端通信.支持json和xml数据和服务器交互,有很多自定义的功能,具体可以去看文档:http://blog ...

  9. javaweb简单的登录增删改查系统_国产化之路统信UOS /Nginx /Asp.Net Core+ EF Core 3.1/达梦DM8实现简单增删改查操作...

    引言 经过前期的准备工作,.net core 3.1的运行环境和WEB服务器已经搭建完毕,这里需要注意一下,达梦DM8数据库对于Entity Framework Core 3.1 的驱动在NuGet官 ...

  10. Django中数据对象的增删改查常用方法,自定义管理器类,过滤器及F和Q对象等知识点总结

    Django对象的增删改查 我们为了对django对象的增删改查进行总结,先在model.py文件中创建类便于举例 定义学生: class Students(models.Model):sname=m ...

最新文章

  1. VMware14安装CentOS7的详细教程
  2. python画指数函数图像_解决python中的幂函数、指数函数问题
  3. ubuntu下解决Ruby安装后缺少openssl的问题
  4. Maple Warrior 个人简历
  5. 数学之美:“植物身上的黄金分割”
  6. Xcode Git 使用
  7. 《高级软件测试》实践作业4学习记录12月25日
  8. Mysql - 安装与配置
  9. 手机调用系统的拍照和裁剪功能,假设界面有输入框EditText,在一些手机会出现点击EditText会弹出输入法,却不能输入的情况。...
  10. mysql cmd 删除表_MySQL查看表和清空表的常用命令总结
  11. java数据校验博客_springmvc教程:利用Validation进行参数校验
  12. flash特效原理:图片滑动放大效果(3)
  13. 【深入理解Nginx】Nginx的配置
  14. c语言教师工资管理系统源程序设计,C语言教师工资管理系统
  15. 阿里云平台购买域名 备案步骤
  16. 互联网应用基础第五课:互联网即时通讯工具之QQ和微信的使用、淘宝客理解
  17. 计算机网络安全实训课程,计算机网络安全课程实验教学实践研究
  18. 程序猿打新总结 6月份 新股申购秘籍
  19. AGV自动导航控制系统
  20. xlsx VLOOKUP 怎么用

热门文章

  1. 仿MIUI音量变化环形进度条实现
  2. 【转载】C++ ,C#数据类型对照
  3. 【java】接口(interface)
  4. 持续交付模型中文化转型的重要意义
  5. 主键思维定势导致的惨案
  6. 内存分配知识:全局,局部,静态变量
  7. “非IE内核浏览器”第一阶段开发计划发布
  8. oracle 删除已备份归档,通过RMAN联机全库备份,包括控制文件,归档日志文件,备份成功后,删除已备份的归档日志。...
  9. element ui 分页增删改查_【新插件发布】AzureAD运维Excel版插件,增删改查快10倍c以上!...
  10. java书籍_非科班,自学java需要把软件工程的课程全部学习完吗?