由于一些很扯淡的兼容性问题,用的是1.11的django,不过这几个命令好像一直没有变。
创建项目 django-admin startproject HelloWorld
https://www.runoob.com/django/django-first-app.html
创建model 先创建app:django-admin startapp TestModel
再接下来在settings.py中找到INSTALLED_APPS这一项,添加上创建的app
做makemigrations和migrate的操作。
https://www.runoob.com/django/django-model.html
RESTFUL API禁用csrf 注释掉setting里的
https://www.jianshu.com/p/f69b241e0894?utm_source=oschina-app
login使用 django自带的user类的基础上,修改变成自己的user类
1 2 3 4 5 6 7 8 9 10 from django.contrib.auth.models import AbstractUserclass UserProfile (AbstractUser ): class Meta : verbose_name = "个人信息" verbose_name_plural = verbose_name def __str__ (self ): return self.username
之后再在setting里面加上AUTH_USER_MODEL = 'info.UserProfile'
, 这里的info是自己的app名字
JSON形式登录退出验证及错误情况处理 view文件里
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 from django.shortcuts import renderfrom django.http import HttpResponsefrom info.consts import StatusCodefrom functools import wrapsfrom info.models import *from django.contrib import authimport jsondef response_json (o ): return HttpResponse(json.dumps(o, ensure_ascii=False ), content_type="application/json,charset=utf-8" ) def login_required_json (f ): @wraps(f ) def inner (request, *arg, **kwargs ): try : if request.user.is_authenticated: return f(request, *arg, **kwargs) except : pass return response_json({ 'code' : StatusCode.NEED_LOGIN_ERROR, 'msg' : "请先登录" , 'data' : {} }) return inner def param_error_json (msg="参数或者方法错误" ): return response_json({ 'code' : StatusCode.WRONG_PARAM, 'msg' : msg, 'data' : {} }) def response_ok_json (data ): return response_json({ 'code' : StatusCode.OK, 'msg' : '' , 'data' : data }) def login (request ): if request.method == "POST" : try : username = request.POST.get('username' ) password = request.POST.get('password' ) except : return param_error_json() user = auth.authenticate(username=username, password=password) if user: auth.login(request, user) return response_ok_json({ "type" : "login" , "authority" : request.user.is_superuser }) return param_error_json('用户名或密码错误,请重试' ) return param_error_json() @login_required_json def logout (request ): if request.method == "POST" : auth.logout(request) return response_ok_json({ "type" : "logout" }) return param_error_json()
consts文件里面是这样的:
1 2 3 4 5 6 class StatusCode : OK = 0 NEED_LOGIN_ERROR = 1 INTERNAL_ERROR = 2 AUTH_FAILED = 3 WRONG_PARAM = 4
postman测试 正常发送测试就行,注意密码其实是加密存储的,所以创建用户的时候可以用createsuperuser
指令,也可以用model的create_user
函数。不能直接操作数据库放进去。
https://blog.csdn.net/check2255/article/details/70338497
POSTMAN的时候注意,因为是post方法,所以参数是写在Body而不是Param里面的。