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.
wrapper is a callable taking five arguments. It is called for every query
execution in the scope of the context manager, with arguments execute,
sql, params, many, and context as described above. It's
expected to call execute(sql, params, many, context) and return the return
value of that call.