บทนำสู่ Django REST Framework: การพัฒนาพร้อมตัวอย่าง

เผยแพร่แล้ว: 2020-10-05

Django REST Framework มีการกระจายอย่างกว้างขวางเป็นแพ็คเกจ Python มาตรฐานที่ผู้ใช้อาจต้องการเพื่อเริ่มต้นการพัฒนา RESTful API มีความซับซ้อน ทรงพลัง ใช้งานง่ายอย่างน่าอัศจรรย์ และมีเวอร์ชันที่น่าสนใจและเรียกดูได้สำหรับ API Django REST Framework มีตัวเลือกในการส่งคืนอ็อบเจ็กต์ JSON เฟรมเวิร์กนี้นำเสนอการสร้างอนุกรมที่มีประสิทธิภาพของโมเดล และแสดงข้อมูลโดยใช้มุมมองที่อิงตามฟังก์ชันพื้นฐานทั้งหมดในโปรแกรมดู REST ทั้งหมด เรียนรู้เพิ่มเติมเกี่ยวกับ เฟรมเวิร์ก Django REST ด้านล่าง:

สารบัญ

Django REST Framework คืออะไร?

Django REST Framework เป็นชุดเครื่องมือที่ยืดหยุ่นและแข็งแกร่ง ซึ่งช่วยให้นักพัฒนาสร้างเว็บ API ได้ง่าย นอกจากนี้ยังมีมุมมองทั่วไปตามคลาสและตัวสร้างอนุกรมสำหรับ API เนื่องจากเป็นซอร์สโค้ด จึงเรียกย่อว่า DRF ซึ่งแสดงถึงไลบรารี Python สำหรับการพัฒนาอินเทอร์เฟซการเขียนโปรแกรมเว็บแอปพลิเคชัน ในบทความนี้ เรากำลังพูดถึงการพัฒนา API พร้อมคำแนะนำทีละขั้นตอน

แต่ก่อนที่จะเริ่มใช้งานคู่มือนี้ สิ่งสำคัญคือต้องเข้าใจว่าทำไมกรอบงานถึงมีความสำคัญ เฟรมเวิร์กที่มีอยู่มากมายช่วยให้นักพัฒนาสร้าง API สำหรับบล็อกแอปพลิเคชันได้อย่างง่ายดาย แต่ควรใช้เฟรมเวิร์ก Django REST เฟรมเวิร์กนี้สะดวกต่อการใช้งานในหลายวิธีและให้ข้อดีดังที่กล่าวไว้ด้านล่าง-

  • นำเสนอเว็บเบราว์เซอร์ที่มี Application Programming Interface ซึ่งเป็นประโยชน์อย่างมากสำหรับนักพัฒนา
  • มีนโยบายการตรวจสอบสิทธิ์รวมถึงแพ็คเกจสำหรับ OAuth1, OAuth2 เป็นต้น
  • โปรเซสเซอร์ซีเรียลไลเซชันในนั้นรองรับแหล่งข้อมูล ORM และที่ไม่ใช่ ORM
  • กรอบงานนี้มีเอกสารมากมายและให้การสนับสนุนชุมชนที่ยอดเยี่ยม
  • มีการใช้และเชื่อถือได้โดยแพลตฟอร์มที่ยอดเยี่ยม เช่น Mozilla, Heroku, RedHat เป็นต้น

อ่าน: แอปพลิเคชั่น Django: ทุกสิ่งที่คุณต้องรู้เกี่ยวกับ

ตั้งค่า Django REST Framework Development

สำหรับผู้เริ่มต้น คุณต้องติดตั้งการพึ่งพา Python สำหรับระบบปฏิบัติการ หากคุณกำลังใช้แพลตฟอร์ม Windows คุณสามารถติดตั้งแพลตฟอร์ม Linux เป็นระบบปฏิบัติการรองได้อย่างง่ายดายด้วยกล่องเสมือนหรือคำสั่งด้วยตนเอง ในการดำเนินการตามกรอบงาน คุณสามารถใช้เครื่องมือการจัดการ Python ที่มีประสิทธิภาพและสะดวก

เครื่องมือส่วนใหญ่เป็นตัวช่วยที่ต้องทำ ช่วยให้นักพัฒนาสามารถเปลี่ยนเวอร์ชัน Python ได้อย่างรวดเร็ว ตั้งค่าเวอร์ชันเฉพาะโปรเจ็กต์ จัดการสภาพแวดล้อมเสมือน และติดตั้งหลายเวอร์ชันบนระบบ หากคุณใช้ระบบปฏิบัติการ Linux หรือ Mac จะติดตั้งได้ง่าย

ด้วย ความช่วยเหลือของเฟรมเวิร์ก Django REST เราสามารถแปลงแอปพลิเคชันที่ไม่ใช่ RESTful ให้เป็น RESTful ได้ นี้รวมถึงขั้นตอนที่กล่าวถึงด้านล่าง-

การตั้งค่า DRF

สำหรับการตั้งค่า DRF คุณต้องติดตั้ง-

เปลือก

$ pip ติดตั้ง djangorestframework

$ pip ตรึง > requirements.txt

อัพเดทการตั้งค่า:py:

Python

ติดตั้ง_APPS = (

'django.contrib.admin',

'django.contrib.auth',

'django.contrib.contenttypes',

'django.contrib.sessions',

'django.contrib.messages',

'django.contrib.staticfiles',

'พูดคุย',

'rest_framework'

)

RESTful โครงสร้าง

ในการพัฒนา RESTful API ปลายทางจะแสดงโครงสร้างและการเข้าถึงของผู้ใช้จากแอปพลิเคชันโดยใช้วิธีการต่างๆ เช่น GET, PUT, POST, DELETE จุดปลายเหล่านี้ได้รับการจัดระเบียบตามหลักเหตุผลรอบๆ องค์ประกอบและคอลเล็กชัน ซึ่งทั้งสองอย่างนี้นับเป็นทรัพยากร หากมีทรัพยากรเพียงแหล่งเดียว ลิงก์ที่เกี่ยวข้องจะถูกใช้เป็น URL สำหรับองค์ประกอบและคอลเล็กชัน

รับ

โพสต์

ใส่

ลบ

/โพสต์/

แสดงกระทู้ทั้งหมด

เพิ่มโพสต์ใหม่

อัพเดททุกกระทู้

ลบกระทู้ทั้งหมด

/posts/<id>

แสดง <id>

ไม่มี

อัพเดท <id>

ลบไอดี

Serializers และมุมมอง

ส่วนประกอบหลักๆ ของ เฟรมเวิร์ก Django REST คือตัวสร้างซีเรียลไลเซอร์ และใช้เพื่ออธิบายรายละเอียดเกี่ยวกับการแสดงบันทึกข้อมูลต่างๆ ตามโมเดล Django Serializers เป็นคลาส Python มาตรฐานที่สามารถสืบทอดพฤติกรรมของโมเดลจากเฟรมเวิร์ก

ภายในคลาส serializers มีชุดฟิลด์แยกซึ่งใช้ประเภทข้อมูลจากแพ็คเกจของเฟรมเวิร์กเดียวกัน พวกเขายังสังเกตเห็นความคล้ายคลึงกันระหว่างเฟรมเวิร์กและคลาส คลาส Serializer ไม่ได้คิดเอง และรวมเข้ากับมุมมองที่จัดการลอจิกบริการ REST จำนวนมาก นอกจากนี้ยังใช้คลาส serializer เพื่อแปลงข้อมูล ตัวอย่างเช่น วิธีการดู Django ปกติคือ-

จาก coffeehouse.stores.models นำเข้า Store

จาก coffeehouse.stores.serializers นำเข้า StoreSerializer

จาก rest_framework.decorators นำเข้า api_view

จาก rest_framework.response นำเข้า Response

@api_view(['GET','POST','DELETE'])

def rest_store (คำขอ):

ถ้า request.method == 'GET':

ร้านค้า = Store.objects.all()

serializer = StoreSerializer (ร้านค้า จำนวนมาก = True)

ตอบกลับ (serializer.data)

elif request.method == 'POST':

… #ตรรกะสำหรับการดำเนินการ HTTP POST

elif request.method == 'ลบ':

… #logic สำหรับการดำเนินการ HTTP DELETE

มุมมองตามชั้นเรียน

ด้วยความช่วยเหลือของมุมมองแบบคลาส เฟรมเวิร์ก Django REST ให้การเข้าถึงฟังก์ชันขั้นสูงสุดและซับซ้อนของผู้ใช้ มุมมองแบบอิงคลาสนำเสนอฟังก์ชันของคลาส Python ที่สมบูรณ์อย่างแท้จริง และอนุญาตให้มุมมอง Django ทำงานได้อย่างง่ายดายด้วยความช่วยเหลือของหลักการเขียนโปรแกรมเชิงวัตถุที่นำไปสู่ความสามารถในการนำกลับมาใช้ใหม่ได้มากขึ้นพร้อมกับเวลาในการใช้งานที่สั้น

มุมมองตามคลาส Django เน้นวิธีการที่ทรงพลังในการสร้างมุมมอง Django และยังเป็นทางเลือกแทนวิธีการที่ใช้ในการสร้าง API ในการพัฒนามุมมองตามคลาส สิ่งสำคัญคือต้องสร้างคลาสที่สามารถสืบทอดจากคลาสอื่น ตัวอย่างเช่น:

# views.py

จาก Django.views.generic นำเข้า TemplateView

คลาส AboutIndex (TemplateView):

template_name = 'index.html'

def get_context_data(ตัวเอง **kwargs):

# **kwargs มีค่าการเริ่มต้นบริบทของคำหลัก (ถ้ามี)

# เรียกใช้ฐานการใช้งานเพื่อรับบริบท

บริบท = super(AboutIndex, self).get_context_data(**kwargs)

# เพิ่มข้อมูลบริบทเพื่อส่งผ่านไปยังเทมเพลต

บริบท['aboutdata'] = 'ข้อมูลที่กำหนดเอง'

ส่งคืนบริบท

# urls.py

จาก coffeehouse.about.views นำเข้า AboutIndex

จาก django.urls เส้นทางการนำเข้า

รูปแบบ url = [

เส้นทาง('เกี่ยวกับ/ดัชนี/',AboutIndex.as_view(),{'onsale':True}),

ชำระเงิน: คำถามและคำตอบสัมภาษณ์ 12 อันดับแรกของ Django สำหรับผู้เริ่มต้น

อัพเดทการดู

เพื่อให้พอดีกับโครงสร้างแอปพลิเคชัน RESTful จำเป็นต้องปรับโครงสร้างมุมมองปัจจุบันใหม่ คุณสามารถแสดงความคิดเห็นในมุมมองเหล่านี้และเพิ่มเป็น-

Python

จาก django.shortcuts การแสดงผลการนำเข้า

จาก django.http นำเข้า HttpResponse

จาก rest_framework.decorators นำเข้า api_view

จาก rest_framework.response นำเข้า Response

จาก talk.models นำเข้า Post

จาก talk.serializers นำเข้า PostSerializer

จาก talk.forms นำเข้า PostForm

def บ้าน (คำขอ):

tmpl_vars = {'form': PostForm()}

การแสดงผลกลับ (คำขอ 'talk/index.html', tmpl_vars)

@api_view(['GET'])

def post_collection (คำขอ):

ถ้า request.method == 'GET':

โพสต์ = Post.objects.all()

serializer = PostSerializer (โพสต์หลายรายการ = True)

ตอบกลับ (serializer.data)

@api_view(['GET'])

def post_element(คำขอ, pk):

พยายาม:

โพสต์ = Post.objects.get(pk=pk)

ยกเว้น Post.DoesNotExist:

ส่งคืน HttpResponse(สถานะ=404)

ถ้า request.method == 'GET':

serializer = PostSerializer (โพสต์)

ตอบกลับ (serializer.data)

คำอธิบาย

  • ในคำแนะนำที่ให้ไว้ด้านบน @api_view มัณฑนากรจะวิเคราะห์คำขอ HTTP ที่สอดคล้องกัน ซึ่งส่งผ่านไปยังฟังก์ชันมุมมอง
  • ตอนนี้มุมมองอาจใช้โพสต์เดียวสำหรับองค์ประกอบหรือดึงข้อมูลทั้งหมดหากเป็นสำหรับคอลเลกชัน
  • สุดท้ายนี้ ข้อมูลจะถูกจัดลำดับเป็น JSON และส่งคืนตามนั้น

API ที่เรียกดูเว็บหรือ URL ที่อัปเดต

URL ที่อัปเดตบางส่วนสำหรับ Python คือ:

# Talk URLs

จาก django.conf.urls รูปแบบการนำเข้า URL

urlpatterns = รูปแบบ (

'talk.views',

url(r'^$', 'บ้าน'),

# api

url(r'^api/v1/posts/$', 'post_collection'),

url(r'^api/v1/posts/(?P<pk>[0-9]+)$', 'post_element')

)

Refactor สำหรับ RESTful API Integration

มันรวมวิธีการ HTTP ที่สำคัญเช่น-

รับ

การโหลดหน้าเริ่มต้น การแสดงโพสต์เป็นสิ่งสำคัญ และในการดำเนินการดังกล่าว คุณสามารถเพิ่มคำขอนี้ได้:

load_posts()

// โหลดทุกโพสต์ในหน้า load

ฟังก์ชั่น load_posts () {

$.ajax({

url : “api/v1/posts/”, // จุดสิ้นสุด

พิมพ์ : “GET”, // http method

// จัดการการตอบสนองที่ประสบความสำเร็จ

ความสำเร็จ : ฟังก์ชั่น (json) {

สำหรับ (var i = 0; i < json.length; i++) {

console.log(json[i])

$(“#talk”).prepend(“<li id='post-“+json[i].id+”'><strong>”+json[i].text+”</strong> – <em> “ +json[i].author+”</em> – <span> “+json[i].created+

“</span> – <a id='delete-post-“+json[i].id+”'>ลบฉัน</a></li>”);

}

},

// จัดการกับการตอบสนองที่ไม่สำเร็จ

error : function(xhr,errmsg,err) {

$('#results').html(“<div class='alert-box alert radius' data-alert>อ๊ะ! เราพบข้อผิดพลาด: “+errmsg+

” <a href='#' class='close'>&times;</a></div>”); // เพิ่มข้อผิดพลาดไปที่ dom

console.log(xhr.status + “: ” + xhr.responseText); // ให้ข้อมูลเพิ่มเติมเล็กน้อยเกี่ยวกับข้อผิดพลาดไปยังคอนโซล

}

});

};

โพสต์

คำขอ POST ได้รับการจัดการในลักษณะเดียวกัน และคุณสามารถทดสอบได้โดยอัปเดตมุมมอง คุณสามารถอัปเดตฟังก์ชัน post_collection () ใน views.py:

@api_view(['GET', 'POST'])

def post_collection (คำขอ):

ถ้า request.method == 'GET':

โพสต์ = Post.objects.all()

serializer = PostSerializer (โพสต์หลายรายการ = True)

ตอบกลับ (serializer.data)

elif request.method == 'POST':

data = {'ข้อความ': request.DATA.get('the_post'), 'ผู้แต่ง': request.user.pk}

serializer = PostSerializer (ข้อมูล = ข้อมูล)

ถ้า serializer.is_valid():

serializer.save()

ตอบกลับ (serializer.data, status=status.HTTP_201_CREATED)

ตอบกลับ (serializer.errors, status=status.HTTP_400_BAD_REQUEST)

อ่านเพิ่มเติม: เงินเดือนนักพัฒนา Django ในอินเดีย

บรรทัดล่าง

ส่วน REST ของ เฟรมเวิร์ก Django REST จริง นั้นค่อนข้างเรียบง่าย และสิ่งที่คุณต้องทำคืออัปเดตฟังก์ชันองค์ประกอบโพสต์เพื่อจัดการกับคำขอ หากคุณยังมีข้อสงสัยใดๆ แสดงว่ามีเฟรมเวิร์กและทรัพยากร Django REST จำนวนมากสำหรับการแสดงด้นสด

หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ Django และภาษาและเครื่องมือสำหรับนักพัฒนาแบบฟูลสแตกอื่น ๆ โปรดดูประกาศนียบัตร PG ของ upGrad & IIIT-B ในการพัฒนาซอฟต์แวร์เต็มรูปแบบ ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 500 ชั่วโมง 9+ โครงการและการมอบหมาย สถานะศิษย์เก่า IIIT-B โครงการหลักในทางปฏิบัติและความช่วยเหลือด้านงานกับ บริษัท ชั้นนำ

เตรียมความพร้อมสู่อาชีพแห่งอนาคต

อัปเกรดและ PG DIPLOMA ของ IIIT-BANGALORE ในการพัฒนาซอฟต์แวร์สแต็คเต็มรูปแบบ
สมัครวันนี้