django简单服务流程

由于一些很扯淡的兼容性问题,用的是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里的

1
# 'django.middleware.csrf.CsrfViewMiddleware',

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 AbstractUser


class 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 render
from django.http import HttpResponse
from info.consts import StatusCode
from functools import wraps
from info.models import *
from django.contrib import auth
import json


# Create your views here.


def 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里面的。

POSTMAN