แอปพลิเคชั่น Django: ทุกสิ่งที่คุณต้องรู้ในปี 2022
เผยแพร่แล้ว: 2021-01-04Django เป็นหนึ่งในเฟรมเวิร์ก python ระดับแนวหน้าที่สร้างขึ้นโดยผู้เชี่ยวชาญ ซึ่งสนับสนุนการออกแบบเชิงปฏิบัติและการพัฒนาอย่างรวดเร็วสำหรับนักพัฒนาเว็บ รวดเร็ว ปลอดภัย และเป็นที่ชื่นชอบในหมู่นักพัฒนาเว็บ Django มีรีจิสทรีของแอปพลิเคชันที่ติดตั้งไว้แล้วซึ่งจัดเก็บการกำหนดค่าและช่วยในการวิปัสสนา มีรายการรุ่นที่ครอบคลุม รีจิสทรีเรียกว่าแอพ แอปพลิเคชัน Django มีอยู่ใน 'django.apps'
>>> จาก django.apps นำเข้าแอพ
>>> apps.get_app_config('admin').verbose_name
'การบริหาร'
สารบัญ
โครงการจังโก้
แอปพลิเคชัน Django ใด ๆ สามารถเรียกได้ว่าเป็นโครงการ ถูกกำหนดโดยโมดูลการตั้งค่า อย่างไรก็ตาม ยังมีอีกหลายสิ่งหลายอย่างเช่นกัน ตัวอย่างเช่น หากคุณเรียกใช้ django-admin startproject mysite คุณจะได้รับไดเรกทอรีโครงการ mysite ซึ่งจะมีแพ็คเกจ mysite Python พร้อม setting.py, urls.py, asgi.py และ wsgi.py แพ็คเกจมักจะสามารถขยายได้เพื่อให้มี CSS โปรแกรมติดตั้ง และเทมเพลตอื่นๆ ที่ไม่เกี่ยวข้องกับแอปพลิเคชันเฉพาะใดๆ
ไดเร็กทอรีรากของโปรเจ็กต์หรือไดเร็กทอรีที่มี manage.py มักจะมีแอปพลิเคชันของโปรเจ็กต์ทั้งหมดที่ไม่ได้ติดตั้งแยกต่างหาก

แอพพลิเคชั่น Django
แอปพลิเคชันหมายถึงแพ็คเกจของ Python ที่มีคุณสมบัติบางอย่าง สามารถนำมาใช้ซ้ำได้ในหลายโครงการ แอปพลิเคชันสามารถเป็นการผสมผสานระหว่างมุมมอง โมเดล URL เทมเพลต ไฟล์สแตติก ฯลฯ ซึ่งมักจะเชื่อมต่อในโปรเจ็กต์ด้วย การตั้ง ค่า INSTALLED-APPS มักจะเชื่อมต่อกับกลไกอื่นๆ ได้ เช่น URLconfs ซึ่งเป็นการ ตั้งค่า MIDDLEWARE
อ่าน: เงินเดือนนักพัฒนา Django ในอินเดีย
แอปพลิเคชัน Django เป็นชุดโค้ดที่สร้างการโต้ตอบกับส่วนต่างๆ ของเฟรมเวิร์กเฉพาะ ไม่มีวัตถุแอปพลิเคชัน บางครั้ง Django อาจต้องโต้ตอบกับแอปพลิเคชันบางอย่างเพื่อการวิปัสสนาหรือการกำหนดค่า ดังนั้นจึงมีข้อมูลเมตาใน AppConfig สำหรับแอปพลิเคชันที่ติดตั้ง แพคเกจโครงการสามารถถือเป็นแอปพลิเคชันและยังสามารถมีแบบจำลองได้
การกำหนดค่าแอปพลิเคชัน Django
หากคุณต้องการกำหนดค่าแอปพลิเคชัน คุณต้องซับคลาส AppConfig แล้วเพิ่มเส้นประใน INSTALLED_Apps เมื่อได้เส้นประ Django จะเริ่มตรวจสอบ ตัวแปร default_app_config เมื่อกำหนดแล้ว จะกลายเป็น คลาสย่อย AppConfig สำหรับแอปพลิเคชันเฉพาะนั้น หากไม่มีการ สร้าง default_app_config Django จะใช้ คลาส AppConfig พื้นฐาน
อ่านเพิ่มเติม: ความแตกต่างระหว่าง Full stack และ Mean Stack
สำหรับผู้แต่ง Django Applications
สมมติว่าคุณกำลังพัฒนาแอปแบบเสียบได้ 'Rock 'n' roll จากนั้น คุณสามารถพัฒนาชื่อในลักษณะต่อไปนี้:
# rock_n_roll/apps.py
จาก django.apps นำเข้า AppConfig
คลาส RockNRollConfig (AppConfig):
ชื่อ = 'rock_n_roll'
verbose_name = “ร็อกแอนด์โรล”
คุณยังสามารถโหลดเป็นคลาสย่อย AppConfig โดยใช้:
# rock_n_roll/__init__.py
default_app_config = 'rock_n_roll.apps.RockNRollConfig'
ดังนั้น RockNRollConfig จึงสามารถใช้ได้เมื่อมี 'rock_n_roll' อยู่ในแอพที่ติดตั้ง จะช่วยให้คุณใช้ประโยชน์จากคุณสมบัติของ AppConfig โดยที่ผู้ใช้ไม่ต้องอัปเดตใน INSTALLED_APPS
สำหรับผู้ใช้แอพพลิเคชั่น
สมมติว่าคุณกำลังใช้แอปพลิเคชัน Rock 'n' roll ในโครงการที่เรียกว่ากวีนิพนธ์ ตอนนี้คุณต้องการให้มันขึ้นมาเป็น Jazz Manouche ก่อนหน้านั้น ดังนั้น คุณสามารถทำตามขั้นตอนเหล่านี้:
# กวีนิพนธ์/apps.py
จาก rock_n_roll.apps นำเข้า RockNRollConfig
คลาส JazzManoucheConfig (RockNRolConfig):
verbose_name = “แจ๊ส มานูช”
# anthology/settings.py
ติดตั้ง_APPS = [
'anthology.apps.JazzManoucheConfig',
# …
]
คลาส AppConfig
ข้อมูลเมตาสำหรับแอปพลิเคชันถูกเก็บไว้ในออบเจ็กต์การกำหนดค่าแอปพลิเคชัน แอตทริบิวต์เหล่านี้บางส่วนได้รับการกำหนดค่าในคลาสย่อย AppConfig และตั้งค่าเป็นแบบอ่านอย่างเดียวหรือโดย Django
แอตทริบิวต์ที่กำหนดค่าได้
AppConfig.name
เส้นทาง: django.contrib.admin
ช่วยในการกำหนดแอปพลิเคชันที่ใช้การกำหนดค่า มันถูกตั้งค่าในคลาสย่อย AppConfig ไม่ซ้ำใครในโครงการ Django

AppConfig.label
ชื่อ: admin
ช่วยในการติดฉลากแอปพลิเคชันใหม่โดยเฉพาะอย่างยิ่งหากทั้งสองมีป้ายกำกับที่ขัดแย้งกัน มันจะกลายเป็นองค์ประกอบสุดท้ายของชื่อโดยค่าเริ่มต้น จะต้องเป็นตัวระบุที่ถูกต้องของ Python ไม่ซ้ำใครในโครงการ Django
AppConfig.verbose_name
ชื่อ: ธุรการ
ค่าเริ่มต้น: label.title()
AppConfig.path
ตัวอย่างไดเรกทอรีแอปพลิเคชัน: '/usr/lib/pythonX.Y/dist-packages/django/contrib/admin'
ในหลายกรณี Django สามารถตรวจจับและตั้งค่าได้โดยอัตโนมัติ แต่คุณสามารถแทนที่แอตทริบิวต์ของคลาสได้อย่างชัดเจนผ่านคลาสย่อย AppConfig
แอตทริบิวต์แบบอ่านอย่างเดียว
AppConfig.module
ตัวอย่างโมดูลราก: <โมดูล 'django.contrib.admin' จาก 'django/contrib/admin/__init__.py'>
AppConfig.models_module
โมดูลพร้อมตัวอย่างโมเดล: <module 'django.contrib.admin.models' จาก 'django/contrib/admin/models.py'>
นอกจากนี้ยังสามารถเป็นไม่มีได้หากไม่มีโมเดล
วิธีการ
AppConfig.get_models()
จะช่วยส่งคืนคลาส Model ที่ทำซ้ำได้สำหรับแอปพลิเคชัน จะต้องมีการเติมรีจิสทรีของแอปให้สมบูรณ์
AppConfig.get_model
ส่งคืนโมเดลที่ระบุโดยคำนึงถึงขนาดตัวพิมพ์: model_name Model_name
ช่วยเพิ่ม LookupError หากไม่มีโมเดลเฉพาะ จะต้องมีการเติมรีจิสทรีของแอปให้สมบูรณ์
AppConfig.ready()
สามารถช่วยแทนที่วิธีการและด้วยเหตุนี้ ดำเนินการเริ่มต้น เช่น การลงทะเบียนสัญญาณ สามารถเรียกได้เมื่อมีการเติมรีจิสทรีอย่างสมบูรณ์ อย่างไรก็ตาม คุณไม่สามารถนำเข้าโมเดลที่ระดับโมดูลที่มีการกำหนดคลาสของ AppConfig คุณสามารถนำเข้าได้อย่างไรก็ตามใน ready() ซึ่งใช้ get_model() หรือคำสั่งนำเข้า
แพ็คเกจเนมสเปซที่ใช้เป็นแอพ
เมื่อแพ็คเกจ Python ไม่มี __init__.py จะเรียกว่าแพ็คเกจเนมสเปซ สามารถกระจายไปทั่วไดเร็กทอรีและตำแหน่งต่างๆ บน sys.path แอปพลิเคชัน Django จะต้องใช้ระบบไฟล์ฐานสัญญาณ ซึ่ง Django ตามการกำหนดค่าจะค้นหาเนื้อหาสแตติก เทมเพลต ฯลฯ ดังนั้น แอปพลิเคชัน Django สามารถใช้ได้เฉพาะในกรณีที่สิ่งใดสิ่งหนึ่งเป็นจริงเท่านั้น:
- แพ็คเกจเนมสเปซมีที่เดียว
- คลาส AppConfig ซึ่งใช้สำหรับกำหนดค่าแอปพลิเคชันมีแอตทริบิวต์คลาสพาธ
หากไม่ตรงตามเงื่อนไข Django จะแสดง ImperlyConfigured
Django Applications Registry
API สาธารณะบางอย่างมีให้โดยการลงทะเบียนแอปพลิเคชัน เหล่านี้คือวิธีการบางอย่าง แม้ว่าอาจมีการเปลี่ยนแปลง:
แอพ.พร้อม
เมื่อแอตทริบิวต์บูลีนถูกตั้งค่าเป็น True และรีจิสตรีได้รับการเติมข้อมูลอย่างสมบูรณ์และด้วยเหตุนี้จึงเรียกเมธอด AppConfig.ready() ทั้งหมด
apps.get_app_configs()
มันจะส่งคืนอินสแตนซ์ AppConfig ที่ทำซ้ำได้
apps.get_app_config(app_label)
มันจะส่งคืน AppConfig สำหรับแอปพลิเคชันที่มี app_label ที่กำหนด หากไม่มีแอปพลิเคชันอยู่ จะทำให้เกิด LookupError
apps.is_installed ( จะตรวจสอบว่ามีชื่อของแอปพลิเคชันที่ระบุอยู่ในรีจิสทรีปัจจุบันหรือไม่ app_name จะเป็นชื่อเต็มของแอป เช่น django.contrib.admin
apps.get_model( มันจะส่งคืนโมเดลด้วย model_name และ app_label ที่กำหนด หากไม่มีแอปพลิเคชันอยู่ จะทำให้เกิด LookupError
กระบวนการเริ่มต้น
ตอนนี้คำถามคือจะโหลดแอปพลิเคชั่น django ได้อย่างไร เมื่อ Django เริ่มต้น django.setup() จะเติมข้อมูลรีจิสทรี
ตั้งค่า ( set_prefix=True )
การกำหนดค่า Django เกิดขึ้น:
- โดยการโหลดการตั้งค่าครั้งแรก
- กำลังบันทึกการตั้งค่า
- หาก set_prefix เป็นจริง คำนำหน้าสคริปต์ URL Revolver จะกลายเป็น FORCE_SCRIPT_NAME หากกำหนดไว้หรืออย่างอื่น
- เริ่มต้นการลงทะเบียนแอปพลิเคชันแล้ว
การเรียกใช้ฟังก์ชันอัตโนมัติเกิดขึ้น:

- เมื่อเซิร์ฟเวอร์ HTTP ทำงานผ่านการสนับสนุน WSGI ของ Django
- เมื่อเรียกใช้คำสั่งการจัดการ
แก้ไขปัญหา
ปัญหาทั่วไปบางประการที่อาจเผชิญคือ:
- AppRegistryNotReady: เกิดขึ้นระหว่างการนำเข้าการกำหนดค่าแอปพลิเคชันหรือรหัสทริกเกอร์โมดูลรุ่นซึ่งไม่ได้ขึ้นอยู่กับการลงทะเบียนแอป หากคุณดำเนินการสืบค้นฐานข้อมูลด้วย ORM ปัญหานี้อาจเกิดขึ้น
- ImportError: ไม่สามารถนำเข้าชื่อ … – เกิดขึ้นเมื่อลำดับการนำเข้าสิ้นสุดในลูป คุณสามารถกำจัดกระบวนการได้โดยลดการพึ่งพาระหว่างโมดูลรุ่นต่างๆ ให้เหลือน้อยที่สุด
- Django.contrib.admin ทำให้เกิดการค้นพบโมดูลผู้ดูแลระบบโดยอัตโนมัติ เปลี่ยน INSTALLED_APPS จาก django.contrib.admin เป็น django.contrib.admin.apps.SimpleAdminConfig เพื่อป้องกัน
หวังว่าตอนนี้คุณสามารถรวมแอปพลิเคชัน Django ในการพัฒนาเว็บของคุณได้อย่างง่ายดาย
รับ หลักสูตรการพัฒนาซอฟต์แวร์ จากมหาวิทยาลัยชั้นนำของโลก รับโปรแกรม PG สำหรับผู้บริหาร โปรแกรมประกาศนียบัตรขั้นสูง หรือโปรแกรมปริญญาโท เพื่อติดตามอาชีพของคุณอย่างรวดเร็ว
บทสรุป
หากคุณสนใจที่จะเรียนรู้เพิ่มเติมเกี่ยวกับ Django และภาษาและเครื่องมือสำหรับนักพัฒนาแบบเต็มสแต็กอื่น ๆ โปรดดูที่ โปรแกรม Executive PG ของ upGrad & IIIT-B ในการพัฒนาซอฟต์แวร์เต็มรูปแบบ ซึ่งออกแบบมาสำหรับมืออาชีพที่ทำงานและมีการฝึกอบรมที่เข้มงวดมากกว่า 500 ชั่วโมง โครงการและการมอบหมายงานมากกว่า 9 รายการ สถานะศิษย์เก่า IIIT-B โครงการหลักที่ปฏิบัติได้จริง และความช่วยเหลือด้านงานกับบริษัทชั้นนำ
