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),
]

 

posted @ 2021-05-16 21:43  栗子测试开发  阅读(104)  评论(0)    收藏  举报