Domanda

Per favore, abbi pazienza con me, dal momento che ho appena iniziato con la piramide. Ho difficoltà a comprendere il contesto e le risorse in piramide, per quanto riguarda Spedizione URL. Non sono del tutto sicuro di cosa significhi dalla descrizione nella documentazione, il contesto e la risorsa sono in qualche modo circolari (per me).

  • Cos'è una risorsa in piramide? È solo ciò che l'URL sta cercando di rappresentare? Ad esempio, se l'URL è /organization/add_users, è l'organizzazione o gli utenti delle risorse?
  • Il contesto è anche l'organizzazione nell'esempio sopra?

Anche,

  • Cos'è esattamente un oggetto di contesto?
  • Cosa dovrebbe contenere l'oggetto contesto? L'esempio nel tutorial ha solo l'ACL e non ha nulla nel metodo INIT.

    class RootFactory(object):
    __acl__ = [(...some permissions...)]
    
    def __init__(self):
        pass
    
  • Quando viene lanciata un'eccezione (proibita ad esempio) in che punto cambia esattamente il contesto?

  • Riesco a vedere lo scopo del contesto mutevole quando c'è qualcosa di simile a un errore proibito, ma quando faccio qualcosa come la convalida, perché dovrei lanciare un'eccezione che è registrata con una vista_Callable diversa, che rende un modello diverso, quando posso semplicemente Renderne un modello diverso all'interno dello stesso View_Callable invece di lanciare l'eccezione? (Ho visto un esempio di errore di convalida per ADD_VIEW nei documenti)

È stato utile?

Soluzione

Prima di tutto, il motivo principale per cui vorresti persino preoccuparti di queste cose quando si utilizza URL Dispatch è allo scopo di utilizzare il sistema di auth di Pyramid. Se non ti interessa, puoi ignorare completamente i contesti e gli alberi delle risorse e continuare con la spedizione.

Alberi delle risorse

La piramide ha un concetto unico di un albero di risorse, che è letteralmente un albero di oggetti che è mappato su un percorso. Questo albero è attraversato dalla radice fino alla fine di un percorso fornito. Durante l'attraversamento se il percorso è esaurito o l'albero colpisce un nodo di congedo, quell'oggetto nell'albero è ora il context.

Nell'URL Dispatch, l'attraversamento non si verifica (per impostazione predefinita), quindi il contesto sarà sempre la radice dell'albero delle risorse.

In generale, puoi usare il contesto per tutto ciò che desideri nella tua applicazione. È usato esplicitamente dalla policy Aclauthorization per determinare le autorizzazioni. Questo è un intero argomento e suggerirei di dare un'occhiata alla mia demo che spiega come usare il sistema di auth di Pyramid con URL Dispatch [1].

Eccezioni

La gestione delle eccezioni nella piramide viene eseguita in due modi diversi:

  1. Puoi usare try: except: a tuo avviso per restituire una risposta diversa.
  2. Puoi utilizzare le viste delle eccezioni per gestire più in generale le eccezioni all'interno della tua app.

Si noti che il secondo modo è richiesto per il rendering di 404 pagine e se si utilizza anche le pagine proibite di Pyramid. Questo perché Pyramid lancia internamente le eccezioni non confuse e proibite che devi catturare e rendere se si desidera personalizzarle.

Quando viene lanciata un'eccezione e c'è una vista di eccezione registrata per abbinare quel tipo, Pyramid invocherà la vista delle eccezioni e passerà l'eccezione come nuovo contesto, quindi è quando il contesto cambia.

Non sono sicuro che la convalida sia un buon esempio di vista di eccezione. Più in genere le viste vengono utilizzate per casi di errore o per l'esecuzione del corto circuito in parti non viste dell'applicazione. Ad esempio, potresti voler gestire e restituire diverse pagine quando la vista non riesce a connettersi al database o quando si desidera restituire una risposta 4xx o 5xx. Per impostazione predefinita se l'eccezione non viene gestita, il server WSGI lo trasforma in una pagina di 500 generiche. Le visualizzazioni delle eccezioni ti consentono di personalizzare quel comportamento.

L'importante asporto di tutto ciò è che è tutto facoltativo. Se sei confuso, non preoccuparti perché puoi utilizzare la piramide senza queste cose e man mano che ti senti più a tuo agio, puoi iniziare a incorporarle nella tua applicazione.

Altri suggerimenti

Non aiuta l'esempio qui: http://docs.pylonsproject.org/projects/pyramid/1.1/tutorials/wiki2/authorization.html#adding-login-and-logout-views non è corretto.

L'eccezione lanciata (almeno per quanto riguarda la piramide 1.0-2) è piramid.exceptions.forbidden; Non l'esempio di Pyramid.httpexceptions.httpformden.

Tuttavia, nel colpire quel filo nel tutorial, ho imparato dove fossero altre cose utili.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top