最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Django開(kāi)發(fā)簡(jiǎn)單接口實(shí)現(xiàn)文章增刪改查

 更新時(shí)間:2019年05月09日 15:29:19   作者:秦?zé)o殤  
這篇文章主要介紹了使用Django開(kāi)發(fā)簡(jiǎn)單接口實(shí)現(xiàn)文章增刪改查,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

1、一些準(zhǔn)備工作

 安裝django

pip install django

創(chuàng)建django項(xiàng)目

進(jìn)入項(xiàng)目代碼存放目錄執(zhí)行命令:

django-admin.py startproject blog_demo

進(jìn)入blog_demo,運(yùn)行命令:

python3.6 manage.py runserver 9000

在瀏覽器地址欄打開(kāi):http://127.0.0.1:9000/ 如果出現(xiàn)以下畫(huà)面,則說(shuō)明服務(wù)器正在運(yùn)行

 

創(chuàng)建博客應(yīng)用(app)

django中每一個(gè)app可以看作是一個(gè)模塊,以app為單位,結(jié)構(gòu)清晰,方便管理。

python3.6 manage.py startapp blog_api

使用開(kāi)發(fā)工具打開(kāi)項(xiàng)目blog_demo,其結(jié)構(gòu)如下:

 

2、models.py

編寫(xiě)模型層代碼,以下語(yǔ)句相當(dāng)于創(chuàng)建了兩張表: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)

創(chuàng)建表結(jié)構(gòu):

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

再次創(chuàng)建表結(jié)構(gòu):

python3.6 manage.py migrate

3、django admin

 登錄

在瀏覽器控制臺(tái)輸入:http://127.0.0.1:9000/admin/login/?next=/admin/

 

創(chuàng)建超級(jí)用戶

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.

郵件地址可以不填,注冊(cè)成功后即可登錄。使用admin后臺(tái)來(lái)管理模型需要先注冊(cè),修改blog_api/admin.py代碼

#導(dǎo)入模型User,Article
from blog_api.models import User,Article

admin.site.register(User)
admin.site.register(Article)

刷新admin后臺(tái),就可以看到剛剛注冊(cè)的模型了。

 

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
    #判斷請(qǐng)求體是否正確
    if key_flag:
      title = req["title"]
      content = req["content"]
      #title返回的是一個(gè)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."})

      '''插入數(shù)據(jù)'''
      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工具調(diào)用接口,運(yùn)行結(jié)果:

 

6、查詢文章接口

#查詢所有文章和狀態(tài)
  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."})

運(yùn)行結(jié)果:

 

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."})
        '''更新數(shù)據(jù)'''
        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."})

運(yùn)行結(jié)果:

 

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

運(yùn)行結(jié)果:

 

9、鑒權(quán)

四個(gè)簡(jiǎn)單的接口已經(jīng)可以運(yùn)行了,但是在發(fā)請(qǐng)求之前沒(méi)有進(jìn)行鑒權(quán),毫無(wú)安全性可言。下面來(lái)實(shí)現(xiàn)簡(jiǎn)單的認(rèn)證機(jī)制。需要用到內(nèi)建模塊hashlib,hashlib提供了常見(jiàn)的摘要算法,如MD5,SHA1等。

鑒權(quán)接口

新增一個(gè)專(zhuān)門(mén)用于鑒權(quán)的接口。在urls.py中添加

 path("auth/",get_token)

在views.py前面新增函數(shù)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()
        #把密碼變成一個(gè)長(zhǎng)度固定的字符串
        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表新增一條記錄。運(yùn)行結(jié)果:

 

用戶認(rèn)證

request.META.get(“header key”) 用于獲取header的信息。注意的是header key必須增加前綴HTTP,同時(shí)大寫(xiě),中劃先會(huì)轉(zhuǎn)成下劃線,例如你的key為X-Token,那么應(yīng)該寫(xiě)成request.META.get("HTTP_X_TOKEN"),修改views.py在get_token后面加上如下代碼:

#認(rèn)證動(dòng)作
def user_auth(request):

  token = request.META.get("HTTP_X_TOKEN",b'')
  print (token)
  if token:
    #暫時(shí)先寫(xiě)上auth接口返回的數(shù)據(jù)
    if token=="0a6db4e59c7fff2b2b94a297e2e5632e":
      return "auth_sucess"
    else:
      return "auth_fail"
  else:
    return "auth_fail"

在接口中調(diào)用user_auth函數(shù),以發(fā)布文章接口為例:

#新增文章
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工具調(diào)用新增文章接口,Header中沒(méi)有X-Token或X-Token錯(cuò)誤時(shí)的運(yùn)行結(jié)果:

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • python中sympy庫(kù)求常微分方程的用法

    python中sympy庫(kù)求常微分方程的用法

    這篇文章主要介紹了python中sympy庫(kù)求常微分方程的用法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • python實(shí)現(xiàn)封裝得到virustotal掃描結(jié)果

    python實(shí)現(xiàn)封裝得到virustotal掃描結(jié)果

    這篇文章主要介紹了python實(shí)現(xiàn)封裝得到virustotal掃描結(jié)果的方法,是比較實(shí)用的技巧,可將掃描結(jié)果寫(xiě)入數(shù)據(jù)庫(kù),需要的朋友可以參考下
    2014-10-10
  • Django中提示消息messages的設(shè)置方式

    Django中提示消息messages的設(shè)置方式

    今天小編就為大家分享一篇Django中提示消息messages的設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-11-11
  • 分享8個(gè)非常流行的 Python 可視化工具包

    分享8個(gè)非常流行的 Python 可視化工具包

    喜歡用 Python 做項(xiàng)目的小伙伴不免會(huì)遇到這種情況:做圖表時(shí),用哪種好看又實(shí)用的可視化工具包呢?今天小編給大家分享8個(gè)非常流行的 Python 可視化工具包,需要的朋友可以參考下
    2019-06-06
  • Python實(shí)現(xiàn)PING命令的示例代碼

    Python實(shí)現(xiàn)PING命令的示例代碼

    本文主要介紹了Python實(shí)現(xiàn)PING命令的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • Python常用的json標(biāo)準(zhǔn)庫(kù)

    Python常用的json標(biāo)準(zhǔn)庫(kù)

    今天小編就為大家分享一篇關(guān)于Python常用的json標(biāo)準(zhǔn)庫(kù),小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2019-02-02
  • Python制作數(shù)據(jù)導(dǎo)入導(dǎo)出工具

    Python制作數(shù)據(jù)導(dǎo)入導(dǎo)出工具

    正好最近在學(xué)習(xí)python,于是打算用python實(shí)現(xiàn)了數(shù)據(jù)導(dǎo)入導(dǎo)出工具,由于是新手,所以寫(xiě)的有些不完善的地方還請(qǐng)見(jiàn)諒
    2015-07-07
  • django在保存圖像的同時(shí)壓縮圖像示例代碼詳解

    django在保存圖像的同時(shí)壓縮圖像示例代碼詳解

    這篇文章主要介紹了django在保存圖像的同時(shí)壓縮圖像,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-02-02
  • python3+django2開(kāi)發(fā)一個(gè)簡(jiǎn)單的人員管理系統(tǒng)過(guò)程詳解

    python3+django2開(kāi)發(fā)一個(gè)簡(jiǎn)單的人員管理系統(tǒng)過(guò)程詳解

    這篇文章主要介紹了python3+django2開(kāi)發(fā)一個(gè)簡(jiǎn)單的人員管理系統(tǒng)過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 8個(gè)python新手入門(mén)項(xiàng)目

    8個(gè)python新手入門(mén)項(xiàng)目

    文將介紹8個(gè)帶有代碼的Python項(xiàng)目,這些項(xiàng)目將幫助大家增強(qiáng)編程能力,這些項(xiàng)目涵蓋了各種主題和難度級(jí)別,助力大家成長(zhǎng)為一個(gè)Python開(kāi)發(fā)者
    2024-01-01

最新評(píng)論

广安市| 新郑市| 建瓯市| 平原县| 红原县| 水城县| 云安县| 湖南省| 南郑县| 新闻| 图片| 赤水市| 将乐县| 新晃| 甘泉县| 莆田市| 报价| 常宁市| 文安县| 怀集县| 沈阳市| 清新县| 塘沽区| 株洲县| 合作市| 汝州市| 堆龙德庆县| 西青区| 荥阳市| 迭部县| 泰州市| 泌阳县| 南宁市| 海阳市| 元朗区| 嘉禾县| 聂拉木县| 梨树县| 武汉市| 万盛区| 萨迦县|