Conas rang stórála saincheaptha a scríobhLink to this heading

Más gá duit stóráil comhaid saincheaptha a sholáthar - sampla coitianta ná comhaid a stóráil ar chóras iargúlta éigin - is féidir leat é sin a dhéanamh trí rang stórála saincheaptha a shainiú. Beidh ort na céimeanna seo a leanúint:

  1. Caithfidh do chóras stórála saincheaptha a bheith ina fho-aicme de Django.Core.Files.Storage.Storage:

    Code
    from django.core.files.storage import Storage
    
    
    class MyStorage(Storage): ...
    
  2. Caithfidh Django a bheith in ann do chóras stórála a dhéanamh gan aon argóintí. Ciallaíonn sé seo gur chóir aon socruithe a thógáil ó django.conf.settings:

    Code
    from django.conf import settings
    from django.core.files.storage import Storage
    
    
    class MyStorage(Storage):
        def __init__(self, option=None):
            if not option:
                option = settings.CUSTOM_STORAGE_OPTIONS
            ...
    
  3. Ní mór do rang stórála na modhanna: meth: _open () `agus:meth: `_save () a chur i bhfeidhm, mar aon le haon mhodhanna eile atá oiriúnach do do rang stórála. Féach thíos le haghaidh tuilleadh faoi na modhanna seo.

    Ina theannta sin, má sholáthraíonn do rang stóráil comhad áitiúil, caithfidh sé an modh ``path () `a shárú.

  4. Caithfidh do rang stórála a bheith: ref: dífhoirmithe <custom-deconstruct-method>`ionas gur féidir é a shraitheadh nuair a úsáidtear é ar réimse in imirce. Chomh fada agus a bhíonn argóintí ag do réimse atá féin:ref: `serializable <migration-serializing>, is féidir leat an maisitheoir aicme django.utils.deconstruct.deconstructible a úsáid chuige seo (sin an rud a úsáideann Django ar FileSystemStorage).

De réir réamhshocraithe, ardaíonn na modhanna seo a leanas NotImplementederror` agus is gnách go gcaithfear iad a shárú:

Tabhair faoi deara, áfach, nach bhfuil na modhanna seo uile ag teastáil agus gur féidir iad a fhágáil d'aon ghnó. Mar a tharlaíonn sé, is féidir gach modh a fhágáil gan cur i bhfeidhm agus Stóráil oibre a bheith agat fós.

Mar shampla, má bhíonn sé daor ábhar cúltaca stórála áirithe a liostáil, b'fhéidir go gcinneann tú gan `Storage.listDir () `a chur i bhfeidhm.

Sampla eile ba ea cúltaca nach láimhseálann ach scríbhneoireacht chuig comhaid. Sa chás seo, ní bheadh ort aon cheann de na modhanna thuas a chur i bhfeidhm.

I ndeireadh na dála, is fútsa atá cé acu de na modhanna seo a chuirtear i bhfeidhm. Beidh comhéadan páirteach (briste b'fhéidir) mar thoradh ar roinnt modhanna gan cur i bhfeidhm.

De ghnáth beidh tú ag iarraidh crúcaí a úsáid atá deartha go sonrach le haghaidh rudaí stórála saincheaptha Seo iad seo:

_open(name, mode='rb')Link to this definition

Riachtanáil.

Tugtar air ag ``Storage.open () ``, is é seo an meicníocht iarbhír a úsáideann an rang stórála chun an comhad a oscailt. Caithfidh sé seo réad ``Comhad ``a thabhairt ar ais, cé i bhformhór na gcásanna, beidh tú ag iarraidh roinnt fo-aicme a thabhairt ar ais anseo a chuireann loighic go sonrach don chóras stórála cúltaca i bhfeidhm. Ba chóir an eisceacht: EXC: FileNotFoundError a ardú nuair nach bhfuil comhad ann.

_save(name, content)Link to this definition

Glaoigh Storage.save () ``. Beidh an ``ainm ``imithe cheana féin trí ``get_valid_name () agus get_available_name () ``, agus is réad ``Comhad féin a bheidh an content.

Ba chóir ainm iarbhír an chomhaid a shábháiltear a thabhairt ar ais (de ghnáth an ``ainm ``a chuirtear isteach, ach más gá don stóráil ainm an chomhaid a athrú, cuir an t-ainm nua ar ais ina ionad).

get_valid_name(name)Link to this definition

Filleann sé ainm comhaid atá oiriúnach le húsáid leis an gcóras stórála bunúsach. Is é an argóint name a cuireadh ar aghaidh chuig an modh seo ná an bunainm comhaid a seoladh chuig an bhfreastalaí nó, má tá upload_to inghlaoite, cuirtear ainm an chomhaid ar ais ar an modh sin tar éis aon fhaisnéis cosán a bhaint. Sáraigh é seo chun an chaoi a dtiontaítear carachtair neamhchaighdeánacha go comhadainmneacha sábháilte a shaincheapadh.

Ní choimeádann an cód a chuirtear ar `Stóráil ``ach carachtair, tréimhsí agus béim alfa-uimhriúla ón ainm comhaid bunaidh, ag baint gach rud eile.

get_alternative_name(file_root, file_ext)Link to this definition

Tugann ainm comhaid malartach ar ais bunaithe ar na paraiméadair file_root` agus file_ext. De réir réamhshocraithe, cuirtear béim móide sreang alfauméireach randamach 7 charachtar leis an ainm comhaid roimh an síneadh.

get_available_name(name, max_length=None)Link to this definition

Filleann ainm comhaid atá ar fáil sa mheicníocht stórála, agus b'fhéidir ag cur an ainm comhaid a chuirtear ar fáil san áireamh. Beidh an argóint ainm ``a chuirtear chuig an modh seo glan cheana féin chuig ainm comhaid atá bailí don chóras stórála, de réir an mhodha ``get_valid_name () a thuairiscítear thuas.

Ní rachaidh fad an ainm comhaid thar ``max_length ``, má chuirtear ar fáil. <django.core.exceptions.SuspiciousOperation>Mura féidir ainm comhaid uathúil saor in aisce a fháil, ardaítear eisceacht a: exc: `SuspiciousFileOperation `.

Má tá comhad le ainm ``ann cheana féin, tugtar ``get_alternative_name () chun ainm malartach a fháil.

Úsáid d'inneall stórála saincheapthaLink to this heading

Is é an chéad chéim chun do stóráil saincheaptha a úsáid le Django ná insint do Django faoin gcúltaca stórála comhaid a bheidh á úsáid agat. Déantar é seo ag baint úsáide as an socrú:setting: STORAGES. Déanann an socrú seo mapáil ainmneacha stórála, ar bealach iad chun tagairt a dhéanamh do stóráil ar leith ar fud Django, chuig foclóir socruithe don chúlcheann stórála sonrach sin. Déantar cur síos iomlán ar na socruithe sna foclóirí istigh sa doiciméadach:setting: STORAGES.

Ansin déantar rochtain ar stórálaí ag ainm ón bhfoclóir:data: django.core.files.storage.storages:

Code
from django.core.files.storage import storages

example_storage = storages["example"]