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:
Tá ``'django.contrib.messages'` in:setting: INSTALLED_APPS.
MIDDLEWAREcontains'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
SessionMiddlewarea chumasú agus a bheith le feiceáil roimhMessageMiddlewarein:setting: MIDDLEWARE.Tá
django.contrib.messages.context_processors.messages'sa roghacontext_processors' ``den chúlcheann ``DjangoTemplatesa 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
SessionStoragea ú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:
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 |
|---|---|
|
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 |
|
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.
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:
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):
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:
{% 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:
{% 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:
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:
``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_tagsaguslevel_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.:
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:
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:
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`:
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
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:
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:
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:
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ú:
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:
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_messagesliosta 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.