首页 > 技术文章 > 《Web接口开发与自动化测试》学习笔记(三)

bcaixl 2019-10-14 17:16 原文

一、认证系统

使用django本身自带的认证系统

1、登录admin后台

  1. 先建立一个管理员用户:

  > python manage.py creatsuperuser

  输入用户名、邮箱和密码即可创建一个管理员用户。

  2. 使用超级用户登录系统

  管理员用户登录地址:localhost:8000/admin/。登录后可以创建一个用户

  3. 引用Django的认证登录

  

......
from django.contrib import auth

......


def login_action(request):
    if request.method == 'POST':
        username = request.POST.get('username', '')
        password = request.POST.get('password', '')
        user = auth.authenticate(username=username, password=password)
        if user is not None:
            auth.login(request, user)
            request.session('user') = username
            response = HttpResponseRedirect('/event_manage/')
            return response
        else:
            return render(request, 'index.html', {'error': 'username or password error!'})

二、进行登录认证

直接在地址中输入localhost:8000/event_manage/ 是可以直接进入到登录成功页面的。因此需要加入一个登录认证。

引入login_request函数

views.py


......
from django.contrib.auth.decorators import login_request
......


# 发布会管理
@login_request
def event_manage(request):
    username = request.session.get('user', '')
    return render(request, 'event_manage.html', {'user': username})

 三、Django模型

1、django模型知识

  模型对应系统的一张表,每个模型是一个python类,继承django.db.models.Model类

  该模型的每个属性表示一个数据库表的字段

  

2、打开models.py文件创建模型

models.py


from django.db import models


class Event(models.Model):
    name = models.CharField(max_length=200)
    limit = models.IntergerField()
    status = models.BooleanField()
    address = models.CharField(max_length=200)
    start_time = models.DateTimeField('events time')
    creat_time = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

class Guest(models.Model):
    event = models.Foreignkey(Event)
    realname = models.CharField(max_length=60)
    phone = models.CharField(max_length=16)
    email = models.EmailField()
    sign = models.BooleanField()
    create_time = models.DateTimeField(auto_now=True)

    class Meta:
        unique_together = ("event", "phone")

    def __str__(self):
        return self.realname

 

3、需要进行数据迁移

>pthon manage.py makemigrations sign

>python manage.py migrate

 

4、通过Admin后台管理数据 

from django.contrib import admin
from sign.models import Event, Guest

admin.site.register(Event)
admin.site.register(Guest)

  通过上面的代码“注册”后,admin后台将会有Event和Guest的数据项。添加一条记录可以看到默认显示的是name和realname,这是因为我们在类Event和Guest的__str__中返回的是name和realname。

 

5、显示更多的字段

from django.contrib import admin
from sign.models import Event, Guest


class EventAdmin(admin.ModelAdmin):
    list_display = ['id', 'name', 'status', 'address', 'start_time']  # 添加的字段
    search_fields = ['name']  # 搜索栏
    list_filter = ['status']   # 过滤器

class GuestAdmin(admin.ModelAdmin):
    list_display = ['realname', 'phone', 'email', 'sign', 'create_time', 'event']
    search_fields = ['realname', 'phone']  # 搜索栏
    list_filter = ['sign']


admin.site.register(Event, EventAdmin)
admin.site.register(Guest, GuestAdmin)

  django提供了大量的自定义模块工具,这些选项在ModelAdmin类中,所以需要创建一个类来继承admin.ModelAdmin类。选项如:list_display,search_fields,list_fielder等

  最后使用新建的类来分别注册Event和Guest。

 

6、数据库切换

  本身系统默认支持的是sqlite数据库,现在使用mysql数据库也是可以的。

  修改对应的配置文件之后,再进行数据迁移即可以进行数据库的切换。

  1.创建一个名为guest的数据库

  2.修改配置文件setting.py

DATABASES = {
    'default': {
        # 'ENGINE': 'django.db.backends.sqlite3',
        # 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
        'ENGINE': 'django.db.backends.mysql',
        'HOST': '127.0.0.1',
        'PORT': '3306',
        'NAME': 'guest',
        'USER': 'root',
        'PASSWORD': '123456',
        'OPTIONS': {
            'init_command': "SET default_storage_engine=INNODB;",
        },
    }
}

  3.进行数据迁移

> python manage.py migrate

  PS:如果遇到出现 1193, "Unknown system variable 'storage_engine'" 的报错,那是因为mysql5.7版本以上需要改配置文件,将OPTION项改为"OPTIONS":{"init_command":"SET default_storage_engine=INNODB;"}

 

推荐阅读