Ionstraimíocht bunachar sonraíLink to this heading
Chun cabhrú leat na ceisteanna a eisíonn do chód a thuiscint agus a rialú, soláthraíonn Django crúca chun feidhmeanna fillte a shuiteáil timpeall ar fhiosruithe bunachar sonraí a fhorghní Mar shampla, is féidir le fillteoirí ceisteanna a chomhaireamh, fad na fiosrúcháin a thomhas, ceisteanna logála, nó fiú cosc a chur ar fhorghníomhú ceisteanna (m.sh. chun a chinntiú nach n-eisítear aon cheisteanna agus teimpléad á rindreáil le sonraí réamhf
Déantar na fillteáin a mhúnlú tar éis: doc: middleware - is glaonna iad a ghlac</topics/http/middleware> ann glaoch eile mar cheann dá n-argóintí. Glaonn siad ar an glaoch sin chun an cheist bunachar sonraí (fillte b'fhéidir) a ghairm, agus is féidir leo an méid a theastaíonn uathu a dhéanamh timpeall an ghlao sin. Cruthaítear agus suiteáiltear iad, áfach, le cód úsáideora, agus mar sin ní theastaíonn monarcha ar leithligh uathu mar a dhéanann middleware.
Déantar fillteán a shuiteáil i mbainisteoir comhthéacs - mar sin tá na fillteáin sealadach agus go sonrach le sreabhadh éigin i do chód.
Mar a luadh thuas, is sampla de fhillteán ná blocaire forghníomhaithe fiosrúcháin. D'fhéadfadh cuma seo a bheith air:
def blocker(*args):
raise Exception("No database access allowed here.")
Agus úsáidfí é d'fhonn ceisteanna ón teimpléad a bhac mar sin:
from django.db import connection
from django.shortcuts import render
def my_view(request):
context = {...} # Code to generate context with all data.
template_name = ...
with connection.execute_wrapper(blocker):
return render(request, template_name, context)
Is iad na paraiméadair a sheoltar chuig na fillteáin ná:
``fhorghníomhach` - glaoch, ar chóir a ghairm leis an gcuid eile de na paraiméadair d'fhonn an cheist a fhorghníomhú.
sql- str`, an ceist SQL atá le seoladh chuig an mbunachar sonraí.params- liosta/tiúpla de luachanna paraiméadar don ordú SQL, nó liosta/tiúpla de liosta/tuples más é `executemany () ``an glao fillte.`many ``- `boola thugann le fios an bhfuil executar ()` nó executemany () ``an glao a ghairmtear sa deireadh ()` (agus cibé an bhfuiltear ag súil go mbeidh params` ina seicheamh luachanna, nó seicheamh seicheamh luachanna).context-- foclóir le sonraí breise faoi chomhthéacs an t-ionghairm. Áirítear leis seo an nasc agus an cúrsóir.
Ag baint úsáide as na paraiméadair, d'fhéadfadh leagan beagán níos casta den bhlocóir ainm an nasc sa teachtaireacht earráide a áireamh:
def blocker(execute, sql, params, many, context):
alias = context["connection"].alias
raise Exception("Access to database '{}' blocked here".format(alias))
Le haghaidh sampla níos iomláine, d'fhéadfadh cuma seo a bheith ar logálaí ceisteanna:
import time
class QueryLogger:
def __init__(self):
self.queries = []
def __call__(self, execute, sql, params, many, context):
current_query = {"sql": sql, "params": params, "many": many}
start = time.monotonic()
try:
result = execute(sql, params, many, context)
except Exception as e:
current_query["status"] = "error"
current_query["exception"] = e
raise
else:
current_query["status"] = "ok"
return result
finally:
duration = time.monotonic() - start
current_query["duration"] = duration
self.queries.append(current_query)
Chun é seo a úsáid, chruthófá réad logger agus é a shuiteáil mar fhilleadh:
from django.db import connection
ql = QueryLogger()
with connection.execute_wrapper(ql):
do_queries()
# Now we can print the log.
print(ql.queries)
``nascach.execute_wrapper () ``Link to this heading
- execute_wrapper(wrapper)Link to this definition
Filleann bainisteoir comhthéacs ar ais a shuiteálann, nuair a chuirtear isteach é, timpeall forghníomhaithe fiosrúcháin bunachar sonraí, agus nuair a bhíonn sé amach, baineann sé an fillteán Tá an fillteán suiteáilte ar an réad nasc snáithe áitiúil.
Is é wrapper is féidir glaoch a ghlacadh cúig argóint. Iarrtar ar gach forghníomhú ceisteanna i raon feidhme an bhainisteora comhthéacs, le hargóintí forghníomhaítear ``, `sql, params`, go leor, agus context mar a thuairiscítear thuas. Táthar ag súil go gcuirfidh sé glaoch ar ``executar (sql, params, go leor, comhthéacs) ``agus luach tuairisceáin an ghlao sin a thabhairt ar ais.