第三单元 视图层

本文介绍了Django项目中处理cryptography错误、创建与注册超级用户、MVT架构应用、GET与POST请求解析以及CSRF防护的方法。通过实例展示了如何在模型、视图和模板中操作数据,并处理HTTP请求,确保用户安全。
摘要由CSDN通过智能技术生成

1.报错

cryptography相关的错误先确定是否下载cryptography包

pip install cryptography

2. 创建超级用户

python .\manage.py createsuperuser
第一个是用户名 尽量用英文,第二个是邮箱 可以跳过 第三个是密码 密码是不可见的
不要使用数字键盘 需要输入两次密码。
如果打的太快出现python命令行 输入exit() 退出

3.注册超级用户

需要admin.py中添加注册信息

from django.contrib import admin
from myapp.models import Game   # 先导入
# Register your models here.
admin.site.register(Game)       # 在注册

4.MVT三层联动

myapp.models中的game类

from django.db import models
# Create your models here.
# 模型类 会自动生成id字段
class Game(models.Model):
    # CharField 字符串 max_length 最大长度 verbose_name 后台管理的字段名
    name = models.CharField(max_length=20,verbose_name='角色名')
    # IntegerField 整型
    atk = models.IntegerField(verbose_name='攻击力')
    level = models.IntegerField(verbose_name='等级')

views.py中先导包获取模型层中的模型类

from myapp.models import Game

定义视图函数获取数据

# 通过Game模型类,取出数据块中的数据(ORM操作),取出所有角色信息
def MyView(request):
    game_data=Game.objects.all()
    content = { # 传递给页面的数据,字典格式
        'games':game_data
    }
    # 返回一个模板页面
    return render(request,'index2.html',content)

5.在模板页面渲染出来

<body>
    <h3>展示数据库中的角色信息</h3>
    <table border="1px">
        <tr>
            <th>编号</th>
            <th>名字</th>
            <th>攻击力</th>
            <th>等级</th>
        </tr>
        {% for game in games %}
        <tr>
            <td>{{ game.id }}</td>
            <td>{{ game.name }}</td>
            <td>{{ game.atk }}</td>
            <td>{{ game.level }}</td>
        </tr>
        {% endfor %}
    </table>
</body>

6.解析GET请求

解析get请求中的query参数127.0.0.1:8000/myview/?page=10&id=1001

def MyView(request):
    page = request.GET.get('page')
    id = request.GET.get('id')
    return HttpResponse(f'这是一个视图,页数为{page},id为{id}')

解析结果为‘这是一个视图,页数为10,id为1001’

7.POST请求处理

编写表单页面,在表单中发送POST请求提交数据

<body>
    <h3>表单页面</h3>
    <form method="post" action="/myview2/">
        {% csrf_token %}
        账号: <input type="text" name="user">
        密码: <input type="password" name="pwd">
        <input type="submit" value="提交">
    </form>
</body>

# ------------------------------------------------------
# 解析POST请求
def MyView2(request):
    user = request.POST.get('user')
    pwd = request.POST.get('pwd')
    return HttpResponse(f"这是第二个视图,账号:{user},密码:{pwd}")

8.解决CSRF问题的两种方法

1.注释setting.py中MIDDLEWARECSRF相关的中间键

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',  
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

2.在表单中添加{%csrf_token%}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值