jesteś tutaj�
257
Przechowywanie danych i manipulowanie nimi
Czas na użycie sekwencji ucieczki (w stosunku do Twoich danych)
>>> from flask import escape
>>> escape(‘To jest Request’)
Markup(‘To jest Request’)
>>> escape(‘To jest <Request>’)
Markup(‘To jest <Request>’)
Użyj funkcji escape
w stosunku do zwykłego
łańcucha znakowego.
Zaimportuj
funkcję.
Użyj funkcji escape
w stosunku do
łańcucha znakowego
zawierającego jakieś
znaki specjalne.
Znaki specjalne zostały zastąpione odpowiednimi
sekwencjami (tzn. przetłumaczone).
Brak zmian
@app.route(‘/viewlog’)
def view_the_log() -> str:
with open(‘vsearch.log’) as log:
contents = log.read()
return contents
Tutaj przechowywane
są nasze zalogowane
dane (w postaci
łańcucha znakowego).
Aby rozwiązać nasz problem, musimy tylko wywołać funkcję
escape
, podając jej jako
argument zmienną
contents
.
Porady
maniaka
Zapewniany przez framework
Flask obiekt Markup to tekst,
który został sformatowany
w taki sposób, aby był bezpieczny
w kontekście użycia w kodzie
HTML lub XML. Markup dziedziczy
po wbudowanym łańcuchu
znakowym Pythona o nazwie
unicode i może być stosowany
wszędzie tam, gdzie korzysta się
ze zwykłych łańcuchów.
Gdy powstawał język HTML, jego projektanci wiedzieli, że niektórzy twórcy stron internetowych
będą chcieli wyświetlać znaki nawiasów trójkątnych (a także inne symbole mające specjalne
znaczenie w HTML-u). W związku z tym wymyślili tzw. escaping (inaczej: użycie sekwencji
ucieczki), czyli sposób kodowania znaków specjalnych HTML-a, dzięki któremu mogą one pojawiać
się w stronach internetowych, lecz nie być przy tym interpretowane jako kod języka HTML.
Zdefiniowano w tym celu szereg translacji, po jednej dla każdego znaku specjalnego. Idea jest
prosta: znak specjalny, taki jak
<
, jest zdefiniowany jako
<
, natomiast znak
>
— jako
>
.
Jeśli wyślesz te translacje zamiast surowych danych, Twoja przeglądarka zrobi to, co należy: wyświetli
znaki
<
oraz
>
, zamiast je ignorować, a także pokaże tekst znajdujący się pomiędzy tymi znakami.
Framework Flask zawiera funkcję o nazwie
escape
(która tak naprawdę została odziedziczona
po silniku Jinja2). Jeśli poda się jej surowe dane, tłumaczy je ona do postaci dostosowanej do
wymagań kodu HTML. Poeksperymentujmy trochę z funkcją
escape
w wierszu poleceń
Pythona, aby przekonać się, jak działa.
Zacznij od zaimportowania funkcji
escape
z modułu
flask
, a następnie wywołaj ją
z argumentem będącym łańcuchem znakowym, który nie zawiera żadnych znaków specjalnych.
Wartość zwracana przez funkcję
escape
jest obiektem Markup (obiektem znacznikowym),
który pod każdym względem zachowuje się tak, jak zwykły łańcuch znakowy. Jeśli
przekażesz tej funkcji łańcuch zawierający jakiekolwiek znaki specjalne HTML-a, dokona
ona jego translacji, tak jak zostało to przedstawione poniżej.
Tak jak w poprzednim przykładzie (pokazanym powyżej), również ten obiekt
znacznikowy możesz traktować w taki sposób, jakby był zwykłym łańcuchem znakowym.
Gdyby udało się nam jakoś wywołać funkcję
escape
względem danych przechowywanych w pliku logu,
bylibyśmy w stanie rozwiązać problem, który mamy obecnie z niewyświetlaniem danych żądań. Nie
powinno to być zbyt trudne, jako że plik logu jest odczytywany „za jednym zamachem” przez funkcję
view_the_log
, zanim zwróci go ona w postaci łańcucha znakowego, jak pokazano poniżej.
Get Python Rusz głową! Wydanie II now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.