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

เผยแพร่แล้ว: 2021-01-04

Django เป็นหนึ่งในเฟรมเวิร์ก 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 โครงการหลักที่ปฏิบัติได้จริง และความช่วยเหลือด้านงานกับบริษัทชั้นนำ

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

สมัครเลยตอนนี้สำหรับปริญญาโทด้านวิศวกรรมซอฟต์แวร์