まず、ユーザ認証トークンに基づいて、
1、設定
アプリの設定に最初に追加されたrest_framework
INSTALLED_APPS = [ ' django.contrib.admin ' 、 ' django.contrib.auth ' 、 ' django.contrib.contenttypes ' 、 ' django.contrib.sessions ' 、 ' django.contrib.messages ' 、 ' django.contrib.staticfiles ' 、 ' API ' 、#我自己注册的APP ' rest_framework ' 、#添加restframework ]
2、URL
django.conf.urls インポートURL から api.apiviewのインポート apiview
urlpatterns = [
URL(R '^(P <バージョン> [V1 |?V2] +)/ login_api / $'、apiview.login_api.as_view())、
]
3、モデル
預金ユーザーがログオンした後に2つのテーブル1つの格納されているユーザ情報、トークンを作成します。
django.db 輸入モデル クラス(models.Model)USER_INFO: ユーザ名 = models.CharField(= 32 MAX_LENGTH、ユニーク=真、verbose_name = ' 用户名' ) パスワード = models.CharField(max_lengthを= 32、verbose_name = ' 密码' ) ニックネーム = models.CharField(MAX_LENGTH = 32、verbose_name = ' 昵称' ) クラスはUserToken(models.Model): 時間 = models.DateTimeField(auto_now = TRUE) ユーザー =へ= models.OneToOneField(' USER_INFO '、on_delete =なし) トークン = models.CharField(MAX_LENGTH = 64)
4、ビュー
apiview.py
django.shortcuts インポートのHttpResponseを から utils.responseの輸入BaseResponse から django.db 輸入モデル から API 輸入モデルは インポートJSON インポート時 クラスlogin_api(オブジェクト): デフポスト(自己、要求、* argsを、** kwargsからの): 応答 = BaseResponseを() してみてください: ユーザー = request._request.POST.get(' ユーザ名' ) PWD= request._request.POST.get(' パスワード' ) OBJ = models.UserInfo.objects.filter(ユーザ名=ユーザー、パスワード= PWD)1次回() なら ないOBJ: response.code = 400000 response.error = {
'ユーザ名':'用户名或密码错误」
}
response.message = '参数错误' 戻りのHttpResponse(json.dumps(応答__dict__ )) token_obj = トークン() トークン = token_obj.CreateToken(ユーザ) models.UserToken.objects。 update_or_create(ユーザー=ユーザー、デフォルト= { ' トークン':トークン、' 時間' :time.time()}) response.data = { ' トークン' :トークン、 ' ユーザ名' :ユーザー、 ' パスワード' :PWD } 以外Eとして例外: response.error = STR(E) response.code = 400001 response.message = ' 请求异常' リターンHttpResponse(json.dumps(応答。__dict__))
token.py
ウェブインポートモデル インポート時間を から datetime型のインポート日時 輸入hashlibの クラス:トークン(オブジェクト) デフCreateToken(自己、ユーザー): '' ' 创建トークン名+时间戳转换为MD5 :のparamユーザー: :リターン :''' のctime = STR(time.time()) トークン = hashlib.md5(バイト(ユーザ、コード= ' UTF-8 ' )) token.update(バイト(CTIME、コード = ' UTF-8 ' )) 戻る)(token.hexdigest
response.py
クラスBaseResponse(オブジェクト): デフ __init__ (自己): self.message = " OK!「 self.data = なし self.error = なし self.code = 200
郵便配達のテストを使用します
ユーザー名とパスワードが正しい場合は、トークンが生成されます、次回のログイン時には、値のトークンが更新されます
ユーザー名とパスワードのエラーは、例外がスローされた場合