6 django user app 分布式路由
* django获取请求数据
1 get请求:request.GET.get(xx, None) 2 表单数据:request.POST.get(xx, None) 3 非表单全部数据:json.loads(request.body)
1 创建user app 并注册
1 创建
python manage.py startapp user
2 注册
INSTALLED_APPS = [
'user',
]
2 user model
import hashlib from django.db import models # Create your models here. class User(models.Model): username = models.CharField(max_length=11, verbose_name='用户名', unique=True) password = models.CharField(max_length=32) is_active = models.BooleanField(default=True, verbose_name='激活状态') created_time = models.DateTimeField(auto_now_add=True, verbose_name='创建时间') update_time = models.DateTimeField(auto_now=True, verbose_name='更新时间') class Meta(object): db_table = "lizi_user" # 定义表名 verbose_name = '账号' # 定义在管理后台显示的名称 verbose_name_plural = verbose_name # 定义复数时的名称(去除复数的s) def __str__(self): # 调用时返回自身的属性,不然都是显示xx object return '{}_{}'.format(self.username, self.is_active) # 对密码进行 md5 加密 def save(self, *args, **kwargs): md5 = hashlib.md5() md5.update(self.password.encode()) self.password = md5.hexdigest() super(User, self).save(*args, **kwargs)
3 生成数据库
python manage.py makemigrations user
python manage.py migrate
4 admin 后台注册 (admin.py 文件)
from django.contrib import admin from user.models import User class UserAdmin(admin.ModelAdmin): list_display = ['id', 'username', 'is_active', 'created_time', 'update_time'] # 显示列 list_display_links = ['username'] # 有链接列 list_filter = ['is_active', 'created_time', 'update_time'] # 右侧快速过滤列 search_fields = ['username'] # 可以模糊检索字段 admin.site.register(User, UserAdmin)
5 创建视图
import hashlib import json from django.core import serializers from django.http import JsonResponse from user.models import User from utils.mytoken import make_token, login_check def login(request): if request.method != 'POST': result = {'code': -1, 'msg': u'请使用 post 请求!'} return JsonResponse(result) json_obj = json.loads(request.body) # 转字典 try: username = json_obj['username'] password = json_obj['password'] except Exception as e: result = {'code': -1, 'msg': u'用户名或密码为空!'} return JsonResponse(result) users = User.objects.filter(username=username) # 返回数组 if users is None: result = {'code': -1, 'msg': u'用户名或密码错误!'} return JsonResponse(result) user = users[0] m = hashlib.md5() m.update(password.encode()) # 密码比对 if m.hexdigest() != user.password: result = {'code': -1, 'msg': u'用户名或密码错误!'} return JsonResponse(result) # 生成 token token = make_token(username) # encode的作用是将unicode编码的字符串编码成二进制数据 #decode的作用是将二进制数据解码成unicode编码 result = {'code': 1, 'data':{'token': token}, 'msg': u'登录成功!'} return JsonResponse(result) @login_check def list(request): if request.method != 'GET': result = {'code': -1, 'msg': u'请使用 get 请求!'} return JsonResponse(result) all_users = serializers.serialize("json", User.objects.all()) result = {'code': 1, 'data':{'all_users':all_users}, 'msg': u'获取所有用户成功!'} return JsonResponse(result)
6 分布式路由
1 工程 urls 文件 from django.contrib import admin from django.urls import path, include urlpatterns = [ path('admin/', admin.site.urls), path('v1/user/', include('user.urls')), # 分布式路由,匹配到/v1/user后,到 user urls中找 user 后面的path ] 2 user app urls 文件 urlpatterns = [ path('login', views.login), path('list', views.list), ]