• 《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;"}

  • 相关阅读:
    BZOJ2843:极地旅行社(LCT入门题)
    BZOJ2049:Cave 洞穴勘测 (LCT入门)
    【LSGDOJ1383】修改回文 dp
    【NOIP2016】愤怒的小鸟
    【USACO11NOV】牛的阵容Cow Lineup 尺取法+哈希
    【LSGDOJ1836】: 量化交易 贪心
    【网络流24题】魔术球问题 二分答案+最小路径覆盖
    【网络流24题】1745: 餐巾计划问题
    【网络流24题】分配问题 最小最大费用最大流
    【LSGDOJ1834 Tree】树链剖分
  • 原文地址:https://www.cnblogs.com/bcaixl/p/11670248.html
Copyright © 2020-2023  润新知