IarrataisLink to this heading

Tá clárlann feidhmchlár suiteáilte i Django a stórálann cumraíocht agus a sholáthraíonn ionchraíocht. Coinníonn sé liosta de na samhlacha atá ar fáil freisin: doc: samhlach </topics/db/models>.

Tugtar ar an gclárlann seo: attr: ~django.apps.apps agus tá sé ar fáil in:mod: django.apps:

Python console
>>> from django.apps import apps
>>> apps.get_app_config("admin").verbose_name
'Administration'

Tionscadail agus iarrataisLink to this heading

Déanann an téarma**tionscad** cur síos ar fheidhmchlár gréasáin Django. Sainmhínítear pacáiste an tionscadail Python go príomha ag modúl socruithe, ach de ghnáth bíonn rudaí eile ann. Mar shampla, nuair a reáchtáil tú django-admin startproject mysite gheobhaidh tú eolaire tionscadail mysite ina bhfuil pacáiste Python mysite le settings.py`, urls.py`, asgi.py` agus wsgi.py. Is minic a leathnaítear an pacáiste tionscadail chun rudaí cosúil le daingneáin, CSS agus teimpléid nach bhfuil ceangailte le feidhmchlár áirithe a áireamh.

Is iondúil gurb é fréamhsheoltóir tionscadail** (an ceann ina bhfuil manage.py ') an coimeádán d'iarratais uile tionscadail nach bhfuil suiteáilte ar leithligh.

Déanann an téarma**iarratas** cur síos ar phacáiste Python a sholáthraíonn roinnt sraith gnéithe. Iarratais: doc: `Is féidir é a athúsáid' i dtionscadail éagsúla. </intro/reusable-apps/>

I measc na bhfeidhmchláir tá teaglaim de mhúnlaí, tuairimí, teimpléid, clibeanna teimpléad, comhaid statacha, URLanna, middleware, srl. De ghnáth déantar iad a sreangú isteach i dtionscadail leis an socrú:: INSTALLED_APPS agus go roghnach le meicníochtaí eile mar URLConfs, an socrú: MIDDLEWARE nó oidhreacht teimpléad.

Tá sé tábhachtach a thuiscint gur sraith cód é feidhmchlár Django a idirghníomhaíonn le codanna éagsúla den chreat. Níl aon rud den sórt sin ann mar réad ``Feidhmchláir`. Mar sin féin, tá cúpla áit ann ina gcaithfidh Django idirghníomhú le feidhmchláir suiteáilte, go príomha le haghaidh cumraíochta agus freisin le haghaidh ionbhreithniú. Sin an fáth go gcoinníonn clárlann an fheidhmchláir meiteashonraí in an:class: ~django.apps.appconfig sampla do gach feidhmchlár suiteáilte.

Níl aon srian ann nach féidir pacáiste tionscadail a mheas mar iarratas freisin agus go mbeadh samhlacha aige, srl. (rud a d'éilfeadh é a chur chuig: setting: INSTALLED_APPS).

Iarratais a chumrúLink to this heading

Chun feidhmchlár a chumrú, cruthaigh modúl apps.py taobh istigh den fheidhmchlár, ansin sainmhínigh fo-aicme de:class: AppConfig ann.

When: Setting: INSTALLED_APPS tá an cosán poncanach chuig modúl feidhmchláir, de réir réamhshocraithe, má aimsíonn Django go díreach fo-aicme ceann:class: AppConfig sa fho-mhodúl apps.py, úsáideann sé an chumraíocht sin don fheidhmchlár. Féadfar an t-iompar seo a dhíchumasú trí shocrú: attr: AppConfig.default go False.

Má tá níos mó ná fo-aicme amháin: class: AppConfig sa modúl apps.py, cuardóidh Django ceann amháin ina bhfuil: attr: AppConfig.default True.

Má aimsítear fo-aicme no:class: AppConfig, úsáidfear an rang base: class: AppConfig.

De rogha air sin, d'fhéadfadh go mbeadh an cosán poncaithe chuig rang cumraíochta ag :setting: INSTALLED_APPS chun é a shonrú go sainráite:

Code
INSTALLED_APPS = [
    ...,
    "polls.apps.PollsAppConfig",
    ...,
]

Maidir le húdair iarrataisLink to this heading

Má tá aip inphlugáilte á chruthú agat ar a dtugtar “Rock 'n' roll”, seo conas a chuirfeá ainm ceart ar fáil don riarachán:

Code
# rock_n_roll/apps.py

from django.apps import AppConfig


class RockNRollConfig(AppConfig):
    name = "rock_n_roll"
    verbose_name = "Rock ’n’ roll"

Luchtaítear RocknrollConfig go huathoibríoch nuai:setting: INSTALLED_APPS tá `rock_n_roll'. Más gá duit é seo a chosc, socraí:attr: ~appconfig.default go False sa sainmhíniú ranga.

Is féidir leat fo-aicmí roinnt: class: AppConfig a sholáthar le hiompraíochtaí éagsúla. Chun insint do Django cén ceann atá le húsáid de réir réamhshocraithe, socraí:attr: ~AppConfig.default go True ina sainmhíniú. Más mian le d'úsáideoirí cumraíocht neamh-réamhshocraithe a roghnú, ní mór dóibh rock_n_roll' a chur in ionad leis an gcosán ponctha chuig an rang sonrach sin ina socrú: setting: INSTALLED_APPS.

Insíonn an tréith: Attr: AppConfig.name do Django cén feidhmchlár a bhaineann an chumraíocht seo leis. Is féidir leat aon tréith eile a dhoiciméadaithe sa tagairt API: class: ~django.apps.appconfig a shainiú.

AppConfig subclasses may be defined anywhere. The apps.py convention merely allows Django to load them automatically when INSTALLED_APPS contains the path to an application module rather than the path to a configuration class.

Do úsáideoirí feidhmchláirLink to this heading

Má tá “Rock 'n' roll” á úsáid agat i dtionscadal ar a dtugtar ``anthology ``, ach ba mhaith leat go dtaispeánfaidh sé suas mar “Jazz Manouche” ina ionad sin, is féidir leat do chumraíocht féin a sholáthar:

Code
# anthology/apps.py

from rock_n_roll.apps import RockNRollConfig


class JazzManoucheConfig(RockNRollConfig):
    verbose_name = "Jazz Manouche"


# anthology/settings.py

INSTALLED_APPS = [
    "anthology.apps.JazzManoucheConfig",
    # ...
]

Taispeánann an sampla seo ranganna cumraíochta sonracha tionscadail atá suite i bhfo-mhodúl ar a dtugtar apps.py. Is coinbhinsiún é seo, ní riachtanas. :class: Is féidir fo-aicmí AppConfig a shainiú áit ar bith.

Sa chás seo, ní mór go mbeadh an cosán poncaithe chuig an rang cumraíochta ag :setting: INSTALLED_APPS toisc go gcónaíonn sé lasmuigh d'iarratas agus dá bhrí sin ní féidir é a bhrath go huathoibríoch.

Cumraíocht feidhmchláirLink to this heading

class AppConfigLink to this definition

Stóráil rudaí cumraíochta feidhmchláir meiteashonraí d'fheidh Is féidir roinnt tréithe a chumrú in:class: ~django.apps.appconfig fo-aicmí. Tá daoine eile leagtha síos ag Django agus léite amháin.

tréithe inchumraitheLink to this heading

AppConfig.nameLink to this definition

Conair iomlán Python chuig an bhfeidhmchlár, m.sh. `django.contrib.admin'.

Sainmhíníonn an tréith seo cén feidhmchlár a bhaineann an chumraíocht leis. Caithfear é a shocrú i ngach:class: ~django.apps.appconfig fo-aicmí.

Caithfidh sé a bheith uathúil ar fud tionscadal Django.

AppConfig.labelLink to this definition

Ainm gearr don iarratas, m.sh. ``admin'

Ligeann an tréith seo feidhmchlár a athlipéadú nuair a bhíonn lipéid contrártha ag dhá iarratas. Tá sé réamhshocraithe go dtí an chomhpháirt deireanach de ``ainm ``. Ba chóir go mbeadh sé ina aitheantóir bailí Python.

Caithfidh sé a bheith uathúil ar fud tionscadal Django.

AppConfig.verbose_nameLink to this definition

Ainm inléite don duine don iarratas, m.sh. “Riarachán”.

Tá an tréith seo réamhshocraithe go ``label.title () ``.

AppConfig.pathLink to this definition

Conair an chórais chomhaid chuig an eolaire feidhmchláir, m.sh. '/usr/lib/pythonx.y/dist-packages/django/contrib/admin'.

I bhformhór na gcásanna, is féidir le Django é seo a bhrath agus a shocrú go huathoibríoch, ach is féidir leat athshlánú follasach a sholáthar mar thréith ranga ar d'fho-aicme: ~django.apps.appconfig. I gcúpla cás tá sé seo ag teastáil; mar shampla más 'pacáiste spás ainmneacha`_ é an pacáiste aip le cosáin iolracha.

AppConfig.defaultLink to this definition

Socraigh an tréith seo go False` chun Django a chosc ó rang cumraíochta a roghnú go huathoibríoch. Tá sé seo úsáideach nuair a shainmhíníonn apps.py ach fo-aicme amháin: class: AppConfig ach níl tú ag iarraidh Django é a úsáid de réir réamhshocraithe.

Socraigh an tréith seo go True` chun a rá le Django rang cumraíochta a roghnú go huathoibríoch. Tá sé seo úsáideach nuair a shainmhíníonn apps.py níos mó ná fo-aicme amháin: class: AppConfig agus ba mhaith leat Django ceann acu a úsáid de réir réamhshocraithe.

De réir réamhshocraithe, níl an tréith seo socraithe.

AppConfig.default_auto_fieldLink to this definition

An príomh-chineál eochair intuigthe le cur le samhlacha laistigh den aip seo. Is féidir leat é seo a úsáid chun: class: ~django.db.models.autofield a choinneáil mar an príomhchineál eochair d'iarratais tríú páirtí.

De réir réamhshocraithe, is é seo an luach de:setting: DEFAULT_AUTO_FIELD.

Tréithe léite amháinLink to this heading

AppConfig.moduleLink to this definition

<module 'django.contrib.admin' from 'django/contrib/admin/__init__.py'>Modúl fréimhe don fheidhmchlár, m.sh. ``.

AppConfig.models_moduleLink to this definition

<module 'django.contrib.admin.models' from 'django/contrib/admin/models.py'>Modúl ina bhfuil na samhlacha, m.sh. ``.

D'fhéadfadh sé a bheith None mura bhfuil modúl samhlacha ``san iarratas. Tabhair faoi deara nach n-astaítear comharthaí a bhaineann leis an mbunachar sonraí mar: data: `~django.db.models.signals.pre_migrate` agus:data: `~django.db.models.signals.post_migrate` ach le haghaidh feidhmchláir a bhfuil modúl ``models acu.

ModhannaLink to this heading

AppConfig.get_models(include_auto_created=False, include_swapped=False)Link to this definition

Tugann sé athrá arís de: class: ~django.db.models.model ranganna don fheidhmchlár seo.

Éilíonn clárlann an aip a bheith daonra go hiomlán.

AppConfig.get_model(model_name, require_ready=True)Link to this definition

Tugann sé sean:class: ~django.db.models.model leis an model_name a thugtar. Tá model_name neamh-íogair ó cháis.

Ardaithe:exc: LookuPerror mura bhfuil samhail den sórt sin ann san iarratas seo.

Éilíonn clárlann an aip a bheith daonra go hiomlán mura bhfuil an argóint requeri_ready` socraithe go False. Iompraíonn requi_ready go díreach mar atá in:meth: `apps.get_model () `.

AppConfig.ready()Link to this definition

Is féidir le fo-aicmí an modh seo a shárú chun tascanna tosaithe a dhéanamh mar chomharthaí a chlárú. Tugtar air chomh luath agus a bhíonn an chlárlann daonra go hiomlán.

Cé nach féidir leat samhlacha a iompórtáil ag an leibhéal modúl ina bhfuil aicmí: class: ~django.apps.appconfig sainmhínithe, is féidir leat iad a iompórtáil i ready () `, ag baint úsáide as ráiteas import nó:meth: ~AppConfig.get_model.

Má tá tú ag clárú: mod: comharthaí samhail <django.db.models.signals>, is féidir leat tagairt a dhéanamh don seoltóir trína lipéad teaghrán in ionad an rang samhail féin a úsáid.

Sampla:

Code
from django.apps import AppConfig
from django.db.models.signals import pre_save


class RockNRollConfig(AppConfig):
    # ...

    def ready(self):
        # importing model classes
        from .models import MyModel  # or...

        MyModel = self.get_model("MyModel")

        # registering signals with the model's string label
        pre_save.connect(receiver, sender="app_label.MyModel")

Pacáistí spás ainmneacha mar aipeannaLink to this heading

Tugtar “pacáistí spás ainmneacha” ar phacáistí Python gan comhad __init__.py agus féadfar iad a scaipeadh ar fud eolairí iolracha ag áiteanna éagsúla ar sys.path` (féach: pep: 420).

Éilíonn feidhmchláir Django cosán chórais comhaid bonn amháin ina ndéanfaidh Django (ag brath ar chumraíocht) cuardach ar theimpléid, sócmhainní statacha, srl. Mar sin, ní fhéadfaidh pacáistí spás ainmneacha a bheith ina bhfeidhmchláir Django ach má tá ceann díobh seo a leanas fíor:

  1. Níl ach suíomh amháin ag an bpacáiste spás ainmneacha i ndáiríre (ie níl sé scaipthe thar níos mó ná eolaire amháin.)

  2. Tá a: attr: ~django.apps.appconfig tréith aicme: ~django.apps.appconfig a úsáidtear chun an feidhmchlár a chumrú: ~django.apps.path tréith aicme, arb é an cosán eolaire iomlán a úsáidfidh Django mar an bonn aonair don fheidhmchlár.

Mura gcomhlíontar ceachtar de na coinníollacha seo, ardóidh Django: exc: ~Django.Core.Exceptions.ImProperlyConfigured.

Clárlann iarrataisLink to this heading

appsLink to this definition

Soláthraíonn an clárlann feidhmchláir an API poiblí seo a Meastar go bhfuil modhanna nach bhfuil liostaithe thíos príobháideacha agus féadfaidh siad athrú gan fógra.

apps.readyLink to this definition

Tréith Boolean atá socraithe go True tar éis don chlárlann a bheith daonra go hiomlán agus tugtar gach modh: meth: AppConfig.ready.

apps.get_app_configs()Link to this definition

Filleann sé cásanna in-athraithe de:class: ~django.apps.appconfig.

apps.get_app_config(app_label)Link to this definition

Tugann tuairisce:class: ~django.apps.appconfig don iarratas leis an app_label a thugtar. Ardaithe:exc: LookuPerror mura bhfuil aon fheidhmchlár den sórt sin ann.

apps.is_installed(app_name)Link to this definition

Seiceálann an bhfuil iarratas leis an ainm tugtha sa chlárlann. Is é app_name ainm iomlán an aip, m.sh. `django.contrib.admin'.

apps.get_model(app_label, model_name, require_ready=True)Link to this definition

Tugann sé sean:class: ~django.db.models.model leis an app_label agus model_name a thugtar. Mar aicearra, glacann an modh seo le argóint amháin sa fhoirm app_label.model_name. Tá model_name cás-neamh-íogair.

Ardaithe:exc: LookuPerror mura bhfuil aon fheidhmchlár nó samhail den sórt sin ann. Ardaithe:exc: ValueError nuair a ghlaonn sé le argóint amháin nach bhfuil ponc amháin go díreach ann.

Éilíonn clárlann an aip a bheith daonra go hiomlán mura bhfuil an argóint requeri_ready` socraithe go False.

<app-loading-process>Má shocraíonn requi_ready go False`, is féidir samhlacha a lorg suas: ref: agus clárlann an aip á dhaonrú `, go sonrach le linn an dara céim ina n-allmhairíonn sé samhlacha. Ansin tá an éifeacht chéanna ag ``get_model () ``agus an tsamhail a allmhairiú. Is é an príomhchás úsáide ná ranganna samhail a chumrú le socruithe, mar shampla:setting: `AUTH_USER_MODEL.

Nuair is é requi_ready False`,, get_model () filleann ``get_model () aicme samhail nach bhféadfadh a bheith feidhmiúil go hiomlán (d'fhéadfadh rochtainí droim a bheith in easnamh, mar shampla) go dtí go mbeidh clárlann an aip daonra go hiomlán. Ar an gcúis seo, is fearr requi_ready a fhágáil go luach réamhshocraithe True nuair is féidir.

Próiseas tionscnaíochtaLink to this heading

Conas a luchtaítear feidhmchláirLink to this heading

Nuair a thosaíonn Django, :func: `django.setup () `atá freagrach as clárlann an fheidhmchláir a líonadh.

setup(set_prefix=True)Link to this definition

Cumraíonn Django ag:

  • Ag luchtú na socruithe.

  • Logáil a chur ar bun.

  • Má tá set_prefix Fíor, socraigh an réimír script réiteach URL to:setting: FORCE_SCRIPT_NAME má tá sé sainmhínithe, nó / ar shlí eile.

  • An clárlann iarratais a thionscnamh.

Tugtar an feidhm seo go huathoibríoch:

  • Agus freastalaí HTTP á reáchtáil agat trí thacaíocht ASGI nó WSGI Django.

  • Agus ordú bainistíochta á ghairm agat.

Caithfear é a ghlaoch go sainráite i gcásanna eile, mar shampla i scripteanna Python simplí.

Cuirtear clárlann an iarratais a thionscnamh i dtrí chéim. Ag gach céim, próiseálann Django gach feidhmchlár san ordó:setting: INSTALLED_APPS.

  1. Allmhairíonn Django ar dtús gach mír in:setting: INSTALLED_APPS.

    Más rang cumraíochta feidhmchláir é, allmhairíonn Django pacáiste fréimhe an fheidhmchláir, atá sainmhínithe ag a tréith: attr: ~AppConfig.name. Más pacáiste Python é, lorgaíonn Django cumraíocht feidhmchláir i bhfo-mhodúl apps.py, nó cruthaíonn sé cumraíocht feidhmchláir réamhshocraithe eile.

    At this stage, your code shouldn't import any models!

    Is é sin le rá, níor cheart do phacáistí fréimhe d'iarratais agus na modúil a shainmhíníonn do ranganna cumraíochta feidhmchláir aon mhúnlaí a allmhairiú, fiú

    Go docht, ceadaíonn Django samhlacha a allmhairiú nuair a luchtar a gcumraíocht feidhmchlá Mar sin féin, d'fhonn srianta gan ghá a sheachaint ar an ord de:setting: INSTALLED_APPS, moltar go láidir gan aon mhúnlaí a allmhairiú ag an gcéim seo.

    Nuair a bheidh an chéim seo críochnaithe, éiríonn APIs a oibríonn ar chumraíochtaí feidhmchláir mar: meth: `~apps.get_app_config () `inúsáidte.

  2. Ansin déanann Django iarracht an fo-mhodúl ``samhlacha ``de gach feidhmchlár a allmhairiú, má tá ceann ann.

    Ní mór duit na samhlacha go léir i models.py` nó models/__init__.py d'iarratais a shainiú nó a allmhairiú. Seachas sin, b'fhéidir nach mbeadh an chlárlann iarratais daonra go hiomlán ag an bpointe seo, rud a d'fhéadfadh a bheith ina chúis le mífhe

    Nuair a bheidh an chéim seo críochnaithe, éiríonn APIs a oibríonn ar mhúnlaí mar: meth: `~apps.get_model () `inúsáidte.

  3. Faoi dheireadh ritheann Django an modh: meth: `~AppConfig.ready () `de gach cumraíocht feidhmchláir.

FabhtcheartúLink to this heading

Seo roinnt fadhbanna coitianta a d'fhéadfadh teacht ort le linn tionscnaimh:

  • AppRegistryNotReady: This happens when importing an application configuration or a models module triggers code that depends on the app registry.

    Mar shampla, :func: `~django.utils.translation.gettext () `úsáideann clárlann an aip chun catalóga aistriúcháin a lorg in iarratais. Chun aistriú ag am allmhairithe, ní mór duit: func: `~django.utils.translation.gettext_lazy () `ina ionad. (Bheadh fabht ag baint úsáid:func: `~django.utils.translation.gettext () `, toisc go dtarlódh an t-aistriúchán ag am allmhairithe, seachas ar gach iarratas ag brath ar an teanga ghníomhach.)

    Spreagfaidh an eisceacht seo freisin fiosrúcháin bunachar sonraí a fhorghníomhú leis an ORM ag am allmhairithe i modúil Ní féidir leis an ORM feidhmiú i gceart go dtí go mbeidh gach samhail ar fáil.

    Tarlaíonn an eisceacht seo freisin má dhéanann tú dearmad glaoch ar: func: `django.setup () `i script Python neamhspleách.

  • ``ImportError: ní féidir ainm a allmhairiú... ``Tarlaíonn sé seo má chríochnaíonn an seicheamh allmhairithe i lúb.

    Chun deireadh a chur le fadhbanna den sórt sin, ba cheart duit spleáchais idir do mhodúil samhlacha a íoslaghdú agus an oibre is lú agus is féidir a dhéanamh ag am Chun an cód a fhorghníomhú ag am allmhairithe a sheachaint, is féidir leat é a bhogadh isteach i bhfeidhm agus a thorthaí a Cuirfear an cód i bhfeidhm nuair a theastaíonn a thorthaí uait ar dtús. Tugtar “meastóireacht leisciúil” ar an gcoincheap seo.

  • Déanann django.contrib.admin uathoibríoch modúil admin ``in iarratais suiteáilte. Chun é a chosc, athraigh do th:setting: `INSTALLED_APPS` chun go mbeidh ```django.contrib.admin.apps.simpleAdminConfig' in ionad 'django.contrib.admin'.

  • ``RuntimeWarning: Tá sé díspreagtha ar rochtain a fháil ar an mbunachar sonraí le linn tionscnaíodh aipeanna. ``Cuirtear an rabhadh seo a spreagadh le haghaidh ceisteanna bunachar sonraí a fhorghníomhú sula mbeidh aipeanna réidh, mar shampla le linn allmhairí modúl nó sa modh: AppConfig.ready. Cuirtear díspreagadh ar cheisteanna bunachar sonraí roimh am den sórt sin toisc go rithfidh siad le linn tosú gach ordaithe bainistíochta, rud a mhoilliú ar thosú do thionscadail, a d'fhéadfadh sonraí seasta a thaisceadh, agus a d'fhéadfadh go dteipeann fiú má

    Mar shampla, botún coitianta ná ceist bunachar sonraí a dhéanamh chun roghanna réimse foirme a líonadh:

    Code
    class LocationForm(forms.Form):
        country = forms.ChoiceField(choices=[c.name for c in Country.objects.all()])
    

    Sa sampla thuas, déantar an cheist ó Country.Objects.all () ``a fhorghníomhú le linn allmhairiú modúl, toisc go ndéantar an `QuerySet a athrá. Chun an rabhadh a sheachaint, d'fhéadfadh an fhoirm a:class: ~django.forms.ModelChoiceField a úsáid ina ionad:

    Code
    class LocationForm(forms.Form):
        country = forms.ModelChoiceField(queryset=Country.objects.all())
    

    Chun é a dhéanamh níos éasca an cód a spreag an rabhadh seo a aimsiú, is féidir leat Python: ref: rabhaidh a chóireáil mar earráidí <python:warning-filter>`chun an rian cruach a nochtadh, mar shampla le ``python -Werror manage.py shell`.