1
jimzhong 2016-08-13 19:19:19 +08:00
同请教。
|
2
wellsc 2016-08-13 19:27:40 +08:00 via Android
Session
|
3
iiduce 2016-08-13 19:29:03 +08:00
既然不用 @login_required ,就去看看它怎么写的,搬过来用哦。
def login_required(function=None, redirect_field_name=REDIRECT_FIELD_NAME, login_url=None): """ Decorator for views that checks that the user is logged in, redirecting to the log-in page if necessary. """ actual_decorator = user_passes_test( lambda u: u.is_authenticated(), login_url=login_url, redirect_field_name=redirect_field_name ) if function: return actual_decorator(function) return actual_decorator |
6
NaVient 2016-08-15 09:13:27 +08:00
其实 Django 的 authenticated 就是给 User 对象添加了一个 BACKENDS 属性,它是被哪个模块 authenticated 验证通过的,就给它加一串类似于 django.contrib.auth.backends.ModelBackend 这样的字符串。
|
7
linkbg OP @NaVient 我是自己写了一个 User 。没有使用它本身 autu 中的 User ,这样也可以使用 authenticated 吗?
|
8
NaVient 2016-08-15 15:00:53 +08:00
@linkbg 如果一定要使用 authenticated 就给你自己写的这张 User 表添加一个 Django 默认 User 表的外键。
|
9
FreeDog 2016-08-15 16:35:28 +08:00
@NaVient 扩展 User 的话,官方更推荐 OneToOne 关系。 https://docs.djangoproject.com/en/1.10/topics/auth/customizing/
|
11
dikT 2016-08-15 17:36:03 +08:00
'''
def login_check(func): def _login_check(req): try: _ = req.session['name'] if not _: return HttpResponseRedirect('/blog/login') except: return HttpResponseRedirect('/blog/login') else: return func(req) return _login_check ''' |
12
rainybowe 2016-08-15 23:00:16 +08:00
以前的做法是自己维护登录数据,例如一张 token 表,每次登录为用户新建 token 。每次请求需要在 request header 中添加 token ,然后写一个装饰器每次校验 token 是否存在来判断是否登陆。
|