Creat na teachtaireachtaíLink to this heading

Go coitianta in iarratais gréasáin, ní mór duit teachtaireacht fógra aon-uaire (ar a dtugtar “teachtaireacht splanc” freisin) a thaispeáint don úsáideoir tar éis foirm nó cineálacha éigin eile ionchuir úsáideora a phróiseáil.

Chuige seo, soláthraíonn Django tacaíocht iomlán do theachtaireachtaí bunaithe ar fhianán agus seisiún, d'úsáideoirí gan ainm agus fíordheimhnithe araon. Ligeann an creat teachtaireachtaí duit teachtaireachtaí a stóráil go sealadach in iarratas amháin agus iad a aisghabháil le taispeáint in iarratas ina dhiaidh sin (an chéad cheann eile de ghnáth). Tá “leibhéal” ar leith clibeáilte ar gach teachtaireacht a chinneann a thosaíocht (m.sh., info, rabhadh `, nó earráid).

Teachtaireachtaí a chumLink to this heading

Cuirtear teachtaireachtaí i bhfeidhm trí aicme a:doc: middleware agus comhfhreagraí:doc: próiseálaí comhthéacs </ref/middleware> </ref/templates/api>.

Tá na socruithe go léir a theastaíonn chun feidhmiúlacht teachtaireachta a chumasú sa réamhshocraithe settings.py a chruthaigh django-admin startproject cheana féin:

  • ``'django.contrib.messages'` in:setting: INSTALLED_APPS.

  • MIDDLEWARE contains 'django.contrib.sessions.middleware.SessionMiddleware' and 'django.contrib.messages.middleware.MessageMiddleware'.

    </topics/http/sessions> <message-storage-backends>Braitheann an réamhshocraithe:ref: backend stórála `ar:doc: `seisiúin. Sin an fáth go gcaithfear SessionMiddleware a chumasú agus a bheith le feiceáil roimh MessageMiddleware in:setting: MIDDLEWARE.

  • django.contrib.messages.context_processors.messages' sa rogha context_processors' ``den chúlcheann ``DjangoTemplates a shainmhínítear i do shuíomh: TEMPLATES.

Mura dteastaíonn uait teachtaireachtaí a úsáid, is féidir leat ``django.contrib.messages'` a bhaint as d':setting: INSTALLED_APPS, an líne ``MessageMiddleware` ó:setting: MIDDLEWARE, agus an próiseálaí comhthéacs teachtaireachtaí ``ó:setting: `TEMPLATES.

An t-inneall teachtaireachta a chumrúLink to this heading

Cúltaca stórálaLink to this heading

Is féidir leis an gcreat teachtaireachtaí cúltaca éagsúla a úsáid chun teachtaireachtaí sealadacha a stó

Soláthraíonn Django trí rang stórála ionsuite in:mod: django.contrib.messages:

class storage.session.SessionStorageLink to this definition

Stórálann an rang seo gach teachtaireacht taobh istigh de sheisiún an iarratais. Dá bhrí sin éilíonn sé iarratas ``contrib.sessions` Django.

class storage.cookie.CookieStorageLink to this definition

Stórálann an rang seo sonraí na teachtaireachta i bhfianán (sínithe le hash rúnda chun ionramháil a chosc) chun fógraí a leanúint ar fud iarratais. Scaoiltear seantheachtaireachtaí dá mbeadh méid na sonraí fianán níos mó ná 2048 beát.

class storage.fallback.FallbackStorageLink to this definition

Úsáideann an rang seo CookieStorage` den chéad uair, agus titim siar ar SessionStorage a úsáid do na teachtaireachtaí nach bhféadfadh a bheith oiriúnach i bhfianán amháin. Éilíonn sé freisin iarratas ``contrib.sessions` Django.

Seachnaíonn an t-iompar seo scríobh chuig an seisiún nuair is féidir. Ba chóir dó an fheidhmíocht is fearr a sholáthar sa chás ginearálta.

FallbackStorage is the default storage class. If it isn't suitable to your needs, you can select another storage class by setting MESSAGE_STORAGE to its full import path, for example:

Code
MESSAGE_STORAGE = "django.contrib.messages.storage.cookie.CookieStorage"
class storage.base.BaseStorageLink to this definition

Chun do rang stórála féin a scríobh, fo-aicmigh an rang BaseStorage i django.contrib.messages.storage.base agus cuir na modhanna _get agus _store i bhfeidhm.

Leibhéil teachtaireLink to this heading

Tá creat na teachtaireachtaí bunaithe ar ailtireacht leibhéal inchumraithe cosúil le hailtireacht an mhodúl logála Python. Ligeann leibhéil teachtaireachtaí duit teachtaireachtaí a ghrúpáil de réir cineálacha ionas gur féidir iad a scagadh nó a thaispeáint go difriúil i

Is iad na leibhéil ionsuite, ar féidir iad a allmhairiú go díreach ó django.contrib.messages:

Tairiseach

Cuspóir

DEBUG

Teachtaireachtaí a bhaineann le forbairt a ndéanfar neamhaird orthu (nó a bhaint) in imscaradh táirgeachta

``EOLAS ``

Teachtaireachtaí faisnéise don úsáideoir

``RATH ``

D'éirigh le gníomh, m.sh. “Nuashonraíodh do phróifíl go rathúil”

``RABHADH ``

Níor tharla teip ach d'fhéadfadh sé a bheith le teacht

EARRÁID

Níor éirigh le gníomh nó tharla teip éigin eile

Is féidir an socrú: SETTING: MESSAGE_LEVEL a úsáid chun an leibhéal íosta taifeadta a athrú (nó is féidir é a athrú in aghaidh an iarrata). Déanfar neamhaird ar iarrachtaí teachtaireachtaí de leibhéal níos lú ná seo a chur leis.

Clibeanna teachtaireachtaLink to this heading

Is léiriú teaghrán iad clibeanna teachtaireachta ar leibhéal na teachtaireachta móide aon chlibeanna breise a cuireadh go díreach sa radharc (féach `Clibeanna teachtaireachta breise a chur leis `_ thíos le haghaidh tuilleadh sonraí). Stóráiltear clibeanna i sreang agus tá siad scartha le spásanna. De ghnáth, úsáidtear clibeanna teachtaireachta mar ranganna CSS chun stíl teachtaireachta a shaincheapadh bunaithe ar chineál teachtai De réir réamhshocraithe, tá clib amháin ag gach leibhéal atá ina leagan beag dá tairiseach féin:

Leibhéal Tairiseach

Clib

DEBUG

Debug

``EOLAS ``

``eolas ``

``RATH ``

``rath ``

``RABHADH ``

``rabhadh ``

EARRÁID

earráid

Chun na clibeanna réamhshocraithe do leibhéal teachtaireachta a athrú (ionsuite nó saincheaptha), socraigh an socrú:setting: MESSAGE_TAGS chuig foclóir ina bhfuil na leibhéil is mian leat a athrú. De réir mar a leathnaíonn sé seo na clibeanna réamhshocraithe, ní gá duit ach clibeanna a sholáthar do na leibhéil is mian leat a shárú:

Code
from django.contrib.messages import constants as messages

MESSAGE_TAGS = {
    messages.INFO: "",
    50: "critical",
}

Ag baint úsáide as teachtaireachtaí i radhaircLink to this heading

add_message(request, level, message, extra_tags='', fail_silently=False)Link to this definition

Teachtaireacht a chur leisLink to this heading

Chun teachtaireacht a chur leis, glaoigh ar:

Code
from django.contrib import messages

messages.add_message(request, messages.INFO, "Hello world.")

Soláthraíonn roinnt modhanna aicearra bealach caighdeánach chun teachtaireachtaí a chur le clibeanna a úsáidtear go coitianta (a léirítear de ghnáth mar ranganna HTML don teachtaireacht):

Code
messages.debug(request, "%s SQL statements were executed." % count)
messages.info(request, "Three credits remain in your account.")
messages.success(request, "Profile details updated.")
messages.warning(request, "Your account expires in three days.")
messages.error(request, "Document deleted.")

Teachtaireachtaí a thLink to this heading

get_messages(request)Link to this definition

** I do theimpléad**, bain úsáid as rud éigin mar:

Django template
{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>{{ message }}</li>
    {% endfor %}
</ul>
{% endif %}

Má tá an próiseálaí comhthéacs á úsáid agat, ba chóir do theimpléad a léiriú le RequestContext. Seachas sin, cinntigh go bhfuil `teachtaireachtaí ``ar fáil do chomhthéacs an teimpléid.

Fiú má tá a fhios agat nach bhfuil ach teachtaireacht amháin ann, ba cheart duit athrá a dhéanamh fós thar an seicheamh ``teachtaireachtaí ``, mar ar shlí eile ní ghlanfar an stóráil teachtaireachta don chéad iarratas eile.

Soláthraíonn an próiseálaí comhthéacs athróg DEFAULT_MESSAGE_LEVELS freisin ar mhapáil ar ainmneacha leibhéal na teachtaireachta ar a luach uimhriúil:

Django template
{% if messages %}
<ul class="messages">
    {% for message in messages %}
    <li{% if message.tags %} class="{{ message.tags }}"{% endif %}>
        {% if message.level == DEFAULT_MESSAGE_LEVELS.ERROR %}Important: {% endif %}
        {{ message }}
    </li>
    {% endfor %}
</ul>
{% endif %}

Taobh amuigh de theimpléid, is féidir leat úsáid a úsáid:func: ~django.contrib.messages.get_messages:

Code
from django.contrib.messages import get_messages

storage = get_messages(request)
for message in storage:
    do_something_with_the_message(message)

<jsonresponsemixin-example>Mar shampla, is féidir leat na teachtaireachtaí go léir a fháil chun iad a thabhairt ar ais in a:ref: JsonResponseMixin `in ionad a:class: `~Django.Views.Generic.Base.TemplateResponseMixin.

get_messages() will return an instance of the configured storage backend.

An rang ``Teachtaireacht ``Link to this heading

class MessageLink to this definition

Nuair a bhíonn tú ag lúb thar liosta na dteachtaireachtaí i dteimpléad, is cásanna den rang ``Teachtaireacht ``a fhaigheann tú. Níl ach cúpla tréith acu:

  • ``teachtaireacht ``: Téacs iarbhír na teachtaireachta.

  • ``leibhéil ``: Sláimhir a thuairiscíonn cineál na teachtaireachta (féach an chuid `leibhéil teachtaireachtaí `_ thuas).

  • tags: Sreang a chomhcheanglaíonn clibeanna uile na teachtaireachta (extra_tags agus level_tag) scartha le spásanna.

  • extra_tags: Sreang ina bhfuil clibeanna saincheaptha don teachtaireacht seo, scartha le spásanna. Tá sé folamh de réir réamhshocraithe.

  • level_tag: An léiriú teaghrán ar an leibhéal. De réir réamhshocraithe, is é an leagan beaga d'ainm an tairiseach gaolmhar é, ach is féidir é seo a athrú más gá duit tríd an socrú: setting: MESSAGE_TAGS a úsáid.

Leibhéil teachtaireachta saincheapthaLink to this heading

Níl aon rud níos mó ná sláimhreacha iad leibhéil teachtaireachtaí, ionas gur féidir leat do choirmeannaigh leibhéil féin a shainiú agus iad a úsáid chun aiseolas úsáideoirí níos saincheaptha a chruthú, m.sh.:

Code
CRITICAL = 50


def my_view(request):
    messages.add_message(request, CRITICAL, "A serious error occurred.")

Agus leibhéil teachtaireachta saincheaptha á chruthú agat ba chóir duit a bheith cúramach chun ró-ualú a sheachaint Is iad na luachanna do na leibhéil ionsuite:

Leibhéal Tairiseach

Luach

DEBUG

10

``EOLAS ``

20

``RATH ``

25

``RABHADH ``

30

EARRÁID

40

Más gá duit na leibhéil saincheaptha i do HTML nó CSS a aithint, ní mór duit mapáil a sholáthar tríd an socrú: setting: MESSAGE_TAGS.

An leibhéal íosta taifeadta in aghaidh an iarrataisLink to this heading

Is féidir an leibhéal íosta taifeadta a shocrú in aghaidh an iarratais tríd an modh set_level:

Code
from django.contrib import messages

# Change the messages level to ensure the debug message is added.
messages.set_level(request, messages.DEBUG)
messages.debug(request, "Test message...")

# In another request, record only messages with a level of WARNING and higher
messages.set_level(request, messages.WARNING)
messages.success(request, "Your profile was updated.")  # ignored
messages.warning(request, "Your account is about to expire.")  # recorded

# Set the messages level back to default.
messages.set_level(request, None)

Ar an gcaoi chéanna, is féidir an leibhéal éifeachtach reatha a aisghabháil le ``get_level`:

Code
from django.contrib import messages

current_level = messages.get_level(request)

Le haghaidh tuilleadh faisnéise faoi conas a fheidhmíonn an leibhéal íosta taifeadta, féach `Leibhéil teachtaireachtaí `_ thuas

Clibeanna teachtaireachta breiseLink to this heading

Le haghaidh rialú níos díreach ar chlibeanna teachtaireachta, is féidir leat sreang ina bhfuil clibeanna breise a sholáthar go roghnach le haon cheann de na modhanna breise:

Code
messages.add_message(request, messages.INFO, "Over 9000!", extra_tags="dragonball")
messages.error(request, "Email box full", extra_tags="email")

Cuirtear clibeanna breise leis roimh an gclib réamhshocraithe don leibhéal sin agus tá spás scartha orthu.

Teipeann sé go ciúin nuair a dhéantar creat na teachtaireachta aLink to this heading

Má tá tú ag scríobh aip in-athúsáidte (nó píosa cód eile) agus má theastaíonn uait feidhmiúlacht teachtaireachtaí a áireamh, ach mura dteastaíonn uait a cheangal ar d'úsáideoirí é a chumasú mura dteastaíonn uathu, féadfaidh tú argóint eochairfhocal breise fail_silently=true a chur chuig aon cheann de na modhanna add_message. Mar shampla:

Code
messages.add_message(
    request,
    messages.SUCCESS,
    "Profile details updated.",
    fail_silently=True,
)
messages.info(request, "Hello world.", fail_silently=True)

Teachtaireachtaí a chur leis i radhairc rang-bhunaitheLink to this heading

class views.SuccessMessageMixinLink to this definition

Cuireann tréith teachtaireachta rathúlachta leis a:class: ~django.views.generic.edit.formView ranganna bunaithe

get_success_message(cleaned_data)Link to this definition

Is é ``cleaned_data ``na sonraí glanta ón bhfoirm a úsáidtear le haghaidh formáidiú teaghrán

Amharcanna sampla.py:

Code
from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.edit import CreateView
from myapp.models import Author


class AuthorCreateView(SuccessMessageMixin, CreateView):
    model = Author
    success_url = "/success/"
    success_message = "%(name)s was created successfully"

Tá na sonraí glanta ón foirm ``ar fáil le haghaidh idirphóireacht sreangán ag baint úsáide as an gcomhréir ``% (field_name) s. Maidir le ModelForms, má theastaíonn rochtain uait ar réimsí ón object shábháilte, athraigh an modh:meth: ~django.contrib.messages.views.successMessageMixin.get_success_message.

Sampla views.py le haghaidh ModelForms:

Code
from django.contrib.messages.views import SuccessMessageMixin
from django.views.generic.edit import CreateView
from myapp.models import ComplicatedModel


class ComplicatedCreateView(SuccessMessageMixin, CreateView):
    model = ComplicatedModel
    success_url = "/success/"
    success_message = "%(calculated_field)s was created successfully"

    def get_success_message(self, cleaned_data):
        return self.success_message % dict(
            cleaned_data,
            calculated_field=self.object.calculated_field,
        )

Teachtaireachtaí in éagLink to this heading

Tá na teachtaireachtaí marcáilte le glanadh nuair a dhéantar an cás stórála a athrá (agus a ghlanadh nuair a dhéantar an freagra a phróiseáil).

Chun na teachtaireachtaí a sheachaint a ghlanadh, is féidir leat stóráil na dteachtaireachtaí a shocrú go False` tar éis iad a athrú:

Code
storage = messages.get_messages(request)
for message in storage:
    do_something_with(message)
storage.used = False

Iompar iarrataí comhthreomharaLink to this heading

Mar gheall ar an mbealach a oibríonn fianáin (agus dá bhrí sin seisiúin), ní shainmhínítear iompar aon chúltaca a úsáideann fianáin nó seisiúin nuair a dhéanann an cliant céanna iolracha iarrataí a leagann nó a fhaigheann teachtaireachtaí comhthreomhaol. Mar shampla, má thionscnaíonn cliant iarratas a chruthaíonn teachtaireacht i bhfuinneog amháin (nó cluaisín) agus ansin ceann eile a fhaigheann aon teachtaireachtaí neamhliteartha i bhfuinneog eile, sula ndéanann an chéad fhuinneog a atreorú, féadfaidh an teachtaireacht a bheith le feiceáil sa dara fuinneog in ionad an chéad fhuinneog inar féidir a bheith ag súil leis.

I mbeagán focal, nuair a bhíonn iliarratais chomhuaineach ón gcliant céanna i gceist, ní ráthaítear go seachadfar teachtaireachtaí chuig an bhfuinneog chéanna a chruthaigh iad ná, i gcásanna áirithe, ar chor ar bith. Tabhair faoi deara nach fadhb í seo de ghnáth i bhformhór na bhfeidhmchlár agus go mbeidh sé ina neamhcheist i HTML5, áit a mbeidh a chomhthéacs brabhsála féin ag gach fuinneog/cluaisín.

SocruitheLink to this heading

Tugann beaga:ref: `socruithe <settings-messages>`smacht duit ar iompar teachtaireachta:

Maidir le cúltaca a úsáideann fianáin, tógtar na socruithe don fhianán ó na socruithe fianán seisiúin:

TástáilLink to this heading

Cuireann an modúl seo modh dearbhaithe tástála saincheaptha ar fáil, chun teachtaireachtaí atá ceangailte le ha:class: ~.httpResponse a thástáil.

Chun leas a bhaint as an dearbhú seo, cuir MessagestestMixin leis an ordlathas ranga:

Code
from django.contrib.messages.test import MessagesTestMixin
from django.test import TestCase


class MsgTestCase(MessagesTestMixin, TestCase):
    pass

Ansin, oidhreacht ón MsgTestCase` i do thástálacha.

MessagesTestMixin.assertMessages(response, expected_messages, ordered=True)Link to this definition

<django.http.HttpResponse>Deilíonn sé gur:mod: ~django.contrib.messages a chuirtear leis an: class: `response `a mheaitseálann ``teachtaireachtaí a bhí ag súil leis `teachtaireachtaí a bhí ag súil leis.

Is é expected_messages liosta de:class: ~django.contrib.messages.message rudaí.

De réir réamhshocraithe, tá an comparáid ag brath ar ordú. Is féidir leat é seo a dhíchumasú tríd an argóint ordaithe ``a shocrú go ``False.