1,安装
pip安装djangorestframework
2,创建项目及应用
创建项目
创建应用
目录结构如图
3,设置设置。py
设置数据库连接
# MySQL增加MySQL连接 数据库={ “默认”:{ “发动机”:“django.db.backends.mysql”, “主机”:127.0.0.1, “端口”:“3306”, “名称”:“dbname”, #数据库名 “用户”:“用户名”, “密码”:“密码”, “选项”:{ “sql_mode”:“传统” }, } }
添加应用
#应用程序定义 INSTALLED_APPS=[ … “rest_framework”, “api”, )
4,创建用户信息模型,在模型。py
django。数据库导入模型 #创建您的模型。 类用户(models.Model): 用户名=models.CharField (max_length=32,独特的=True) 密码=models.CharField (max_length=32) 类元: db_table=坝没А? verbose_name=verbose_name_plural='用户信息表” 类userToken (models.Model): 用户名=models.OneToOneField(=坝没А?on_delete=models.DO_NOTHING) 令牌=models.CharField (max_length=60) 类元: db_table=' user_token ' verbose_name=verbose_name_plural='用户令牌表”
在项目下执行命令生成数据表
python管理。py makemigrations python管理。py迁移
5,在视图。py文件里,编写登录验证程序
django。快捷方式进口呈现 #创建你的观点。 导入的时间 从api导入模型 django。http进口JsonResponse 从rest_framework。视图导入APIView 类AuthView (APIView): def post(自我,请求,* args, * * kwargs): ret={“代码”:1000年,“味精”:没有} 试一试: #参数是datadict形式 usr=request.data.get(用户名) 不是=request.data.get(密码) # usr=request._request.POST.get(用户名) #不是=request._request.POST.get(密码) # usr=request.POST.get(用户名) #不是=request.POST.get(密码) 打印(usr) # obj=models.User.objects。过滤器(用户名=把睢?密码=' 123456 ')当代() obj=models.User.objects.filter(用户名=usr密码=pas)当代() 打印(obj) print(类型(obj)) 打印(obj.username) 打印(obj.password) 如果不是obj: ret(“代码”)=' 1001 ' ret[‘味精’]='用户名或者密码错误的 返回JsonResponse (ret) #里为了简单,应该是进行加密,再加上其他参数 令牌=str (time.time ()) + usr 打印(令牌) models.userToken.objects。update_or_create(用户名=obj,违约率={“令牌”:令牌}) ret[‘味精’]='登录成功的 # ret[“令牌”]=令牌 除了例外e: ret(“代码”)=1002 ret[‘味精’]='请求异常” 返回JsonResponse (ret)
6,在urls . py设置访问路径
django。contrib进口管理 django。网址导入路径 从django.conf。url输入url 从api。视图导入AuthView urlpattern=[ 路径(admin/, admin.site.urls), url (r/v1/认证/$ ^ api的,AuthView.as_view ()), )
7,通过邮差验证登录接口
如图显示登录成功。
遇到的坑:
视图获取柱参数的方式:
#如下有三种方式获取参数,有些文章介绍,必须使用第二种, #其实不然,具体使用哪种要看参数的传入形式而定,建议使用第一种, #因为第一种支持键值和json格式,后面两种仅支持键值。 usr=request.data.get(用户名) 不是=request.data.get(密码) # usr=request._request.POST.get(用户名) #不是=request._request.POST.get(密码) # usr=request.POST.get(用户名) #不是=request.POST.get(密码)django框架休息实现用户登录认证详解