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 inactive status = 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 alive status = 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/"text-align: center">
创建超级用户
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"htmlcode">#导入模型User,Article from blog_api.models import User,Article admin.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返回的是一个list title_exist = Article.objects.filter(title=title) #判断是否存在同名title if 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.status return 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)==2 if 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 = title old_art.content = content old_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.id art.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).upwd if 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错误时的运行结果:
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线
暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。
艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。
《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。
更新动态
- DzintraErliha-Dreamscape(2024)[24Bit-96kHz]FLAC
- 群星.1999-上华世纪国语总冠军4CD【上华】【WAV+CUE】
- 叶丽仪.1992-仙鹤神针电视剧原声音乐专辑【星传真】【WAV+CUE】
- 陈柏宇.2011-QUINQUENNIUM【SONY】【WAV+CUE】
- 《51首热门当红歌曲 十大顶级发烧女声 3CD》[WAV+CUE][1.6GB]
- 《赵传 深受摇滚迷青睐的台湾音乐人 约定》[WAV+CUE][320MB]
- 《庄心妍 实力唱将 发烧音乐精选集》[WAV+CUE][380MB]
- [音展纪念碟]2006年《TAA台湾第十六届国际HI-ENDHI-FI音响展》2cd[WAV]
- 中国音乐地图之听见西藏山歌牧歌酒歌2020[WAV分轨]
- 王宏伟2017-永远的红飘带[太平洋影音][WAV+CUE]
- 费翔.1997-NOW现在【第一中国】【WAV+CUE】
- 新格合唱团.1981-我唱你和2辑(滚石新格民歌系列)【新格】【WAV+CUE】
- 陈柏宇.2011-QUINQUENNIUM【SONY】【WAV+CUE】
- 雨果唱片-《金唛系列-蔷薇依韵琼瑶》WAV
- 陈百强《凝望(2012华纳LPCD45限量版)[DMI]》[WAV整轨]