บทนำสู่ Django REST Framework: การพัฒนาพร้อมตัวอย่าง
เผยแพร่แล้ว: 2020-10-05Django 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'>×</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 โครงการหลักในทางปฏิบัติและความช่วยเหลือด้านงานกับ บริษัท ชั้นนำ