《Web接口开发与自动化测试》学习笔记(三)
一、认证系统
使用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;"}