Django Rest Framework - 实例PartyDemo 之 Token验证
2017-01-22 11:12
826 查看
1.配置
mysite/setting.py 配置token moduleINSTALLED_APPS = ( ... 'rest_framework.authtoken' )
2.生成相关表
python manage.py migrate
mysql> show tables; +----------------------------+ | Tables_in_store | +----------------------------+ | auth_group | | auth_group_permissions | | auth_permission | | auth_user | | auth_user_groups | | auth_user_user_permissions | | authtoken_token #生成此表
3.使用
在model中实现testrestapi/model.py
(1).第一种,配置所有
# 为每个用户添加token值 @receiver(post_save, sender=settings.AUTH_USER_MODEL) def create_auth_token(sender, instance=None, created=False, **kwargs): if created: Token.objects.create(user=instance)
(2)第二种 sender指定实体
#from django.contrib.auth.models import User @receiver(post_save, sender=User) def create_auth_token(sender, instance=None, created=False, **kwargs): if created: Token.objects.create(user=instance)
当在views.py中进行 create_auth_token 的时候 当前view中的api就有token验证
#from django.conf import settings #from django.db.models.signals import post_save #from django.dispatch import receiver #from rest_framework.authtoken.models import Token def create_auth_token(sender, instance=None, created=False, **kwargs): if created: Token.objects.create(user=instance)
推荐第一种方案
访问是就会需要token 值
{ "detail": "Authentication credentials were not provided." }
4. token rest framework 配置实现
mysite/setting.py 配置REST_FRAMEWORK = { 'DEFAULT_PERMISSION_CLASSES': ( 'rest_framework.permissions.IsAuthenticated', #必须有 ), 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework.authentication.TokenAuthentication', ) }
5.获取Token
(1)配置token url在api moduel 下url.py 进行下面配置 :
urlpatterns = [ url(r'^list/', PartyList.as_view()), url(r'^listset/', party_set_list), url(r'^detail/(?P<pk>[0-9]+)$', PartyDetail.as_view()), url(r'^api-token-auth/', views.obtain_auth_token), # 获取token ]
(2)访问地址 : ip:port/modelname/api-token-auth
(3)返回值
6.验证
在http 请求header 添加 Authorization 字段,比如Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b
比如postman , 注意 : Token 字段与值 之间有空格。
7.android 使用okhttp 拦截器实现
OkHttpClient.Builder builder = new OkHttpClient.Builder(); builder.addInterceptor(loggingInterceptor); builder.addNetworkInterceptor(new Interceptor() { @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); if (SPUtil.hasKey(SPConstrant.USER_TOKEN)) { //header add token request = request.newBuilder() .addHeader("Authorization","Token "+SPUtil.getSpString(SPConstrant.USER_TOKEN)) //伪获取 .build(); } return chain.proceed(request); } });
8.问题
出现下面问题:{ "non_field_errors": [ "Unable to log in with provided credentials." ] }
解决:
1.auth_user表中是否有该用户;
2.该用户的is_active是否为1;
3.authtoken_token表中是否有该用户的记录;
4.先创建超级用户,再进行创建用户
python manage.py createsuperuser
5.设置用户密码,可能是数据库存储的密码为明文
Django Rest Framework - 实例PartyDemo 之 用户相关
9.项目地址
https://github.com/LABELNET/django-mysite-frist相关文章推荐
- Django Rest Framework - 实例PartyDemo 之 用户相关
- Django Rest Framework - 实例PartyDemo 之 API文档
- Django Rest Framework - 实例PartyDemo 之 增删改查
- Django REST framework 的TokenAuth认证及外键Serializer基本实现
- token 验证详解实例
- django开发项目实例3--用session是实现简单的登陆、验证登陆和注销功能
- Django Celery Redis 异步执行任务demo实例
- 基于vue 实现token验证的实例代码
- jQury Ajax使用Token验证身份实例代码
- 自定义Django中间件(登录验证中间件实例)
- 【PythonDjango后台实例 第六章】Django实现简单的登陆验证功能
- Django Token验证用户注册邮箱验证
- WINDOWS == Django Celery Redis 异步执行任务demo实例
- BGP 路由反射器配置实例(Route-Reflector)实际案例(配图+详细验证过程)
- OSPF身份验证配置实例 推荐
- SMTP协议详解,发送Email,支持密码验证,发送实例
- OSPF虚链路(virtual-link)配置实例 + 详细验证过程
- AJAX实例的表单验证
- RedHat 上安装多个 mysql 实例并配置 django 连接的操作记录
- OSPF身份验证配置实例