ユーザーが希望のユーザー名で登録できるPython(およびFlask)でWebアプリケーションを作成しています。/user/ にプロファイルを表示し、サーバー上に各ユーザーのディレクトリを作成したいと考えています。
ユーザー名が URL とディレクトリの両方で安全であることを確認する最善の方法は何ですか? base64 で urlsafe メソッドを使用している人について読みましたが、簡単に認識できるように、ユーザー名に関連する文字列が必要です。
ユーザーが希望のユーザー名で登録できるPython(およびFlask)でWebアプリケーションを作成しています。/user/ にプロファイルを表示し、サーバー上に各ユーザーのディレクトリを作成したいと考えています。
ユーザー名が URL とディレクトリの両方で安全であることを確認する最善の方法は何ですか? base64 で urlsafe メソッドを使用している人について読みましたが、簡単に認識できるように、ユーザー名に関連する文字列が必要です。
このようなURLセーフ値の総称は「slug」であり、値を生成するプロセスは「slugification」または「toslugify」と呼ばれます。人々は一般的にそうするために正規表現を使用します。これは、stdlibモジュールのみを使用したものです(このテーマに関するこの記事から入手)。
import re
from unicodedata import normalize
_punct_re = re.compile(r'[\t !"#$%&\'()*\-/<=>?@\[\\\]^_`{|},.]+')
def slugify(text, delim=u'-'):
"""Generates an slightly worse ASCII-only slug."""
result = []
for word in _punct_re.split(text.lower()):
word = normalize('NFKD', word).encode('ascii', 'ignore')
if word:
result.append(word)
return unicode(delim.join(result))
リンクされた記事には、追加のモジュールを必要とする別の2つの選択肢があります。