博客根据类型分页 分页效果(相关方法) 性别设置0,1在页面显示男女 密码加密 重定向 设置cookie和session的作用(可实现退出登录和页面间的切换) 使用前端验证和后端验证实现注册

本文详细介绍了博客系统的多项改进措施,包括通过文章类型优化页面展示、实现分页效果、密码加密方法、重定向功能、Cookie与Session的使用,以及前后端验证在注册流程中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、在博客系统上的改动


之前完成的博客有几个页面内容都相同,可以改为通过type文章类型来获取文章; 通过前端传递想要获取文章类型,视图查询相关类型的文章,进行返回

视图
在这里插入图片描述
路由:要在当前路径后面加上一个组匹配(输入文章类型可查找)
在这里插入图片描述
模板
在这里插入图片描述


二、对于分页效果的总结


1.分页相关的方法


第一步:导包

from django.core.paginator import Paginator

第二步:根据其中的方法来分页

 paginator = Paginator(article,5)

在这里插入图片描述
第三步:在拿到分页数据并按每页几条数据分页后有以下一些方法来帮助我们更好的使用分页: (作用对应的例子都是通过打印方法得到的数据)

第四步:根据当前页page_obj = paginator.page(page) 来操作分页方法对显示页码进行调整(上一页,下一页,尾页,首页等效果)

from django.core.paginator import Paginator

 article = Article.objects.all().order_by("-date")
  paginator = Paginator(article,5)
  page_obj = paginator.page(2)

下面所用到的变量都已在上面的式子中赋值

分页方法作用
paginator.count返回内容总条数(获取到的所有数据的数量)如103条符合条件的数据
paginator.page_range可迭代的页数,我们可以取得页数范围 如 range(1, 22)
paginator.num_pages返回的是最大页数 如21
paginator.page(page) paginator.page(1)page中可传值,对应的则是在可有页数据中的对象 如<Page 1 of 21> 21页中的第一页;是对象可以遍历,遍历该对象所在页中的数据
page_obj.number当前页数 如2
page_obj.has_next()有没有下一页,返回值是True 或 False
page_obj.has_previous有没有上一页,返回值是True 或 False
page_obj.has_other_pages()判断是否还有其他页,返回值是True 或 False
page_obj.next_page_number()返回下一页的页码 如 3,如果没有则抛出异常:本页值为空
page_obj.previous_page_number返回上一页的页码 如 1,如果没有则抛出异常:本页值为空

一些例子:
在这里插入图片描述


2.通过分页的相关方法来实现分页的效果


实现效果:实现每页6条数据,下面显示页码固定为五条,有首页,上一页,下一页和尾页的功能

在模板中:
在这里插入图片描述
视图中:
在这里插入图片描述
路由中:
在这里插入图片描述
未增加更多数据,结果只能如下:
在这里插入图片描述


三、对于类模型中性别设置1,0在页面中显示对于男女的测试


类模型中:
在这里插入图片描述
视图中:
在这里插入图片描述
路由中:
在这里插入图片描述
在这里插入图片描述


四、实现密码加密(md5.digest 和md5.hexdigest 的区别)


1.密码加密


第一步:导包

import hashlib

第二步:定义密码加密函数setPassword

def setPassword(password):
    ## 实现一个密码加密
    md5 = hashlib.md5()  ## 创建一个md5的实例对象
    md5.update(password.encode())  ## 对密码编码进行加密
    result = md5.hexdigest()  ## 拿到加密字符串hex是十六进制加密
    return result

2.md5.digest 和md5.hexdigest 的区别


① md5.digest
md5.digest() 代表拿到加密字符串但加密字符串是二进制的

② md5.hexdigest
md5.hexdigest() 代表拿到的是十六进制的加密字符串

③ 查看加密字符串:
hashlib.md5.digest() 加密后的结果用二进制表示
查看内容可以使用print hashlib.md5(str).digest()
md5(str)括号中的str填写要加密的字符串


五、重定向(利用重定向可以实现用户登录主页效果)


第一步:导包

from django.http import HttpResponseRedirect

实现效果:用户输入用户名及密码正确重定向到主页面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
重定向实现成功


六、设置cookie和session的作用


① 使用cookie可以使用户访问服务器不用重复输入用户名密码实现页面间的切换

使用服务器提供的cookie即可避免这一操作;session同样可实现此功能;
但由于cookie保存在本地,可被修改和模仿,导致安全性较低;
而session保存在服务器,一般放在数据库中,所以安全性较高;
也正因为存放地点的原因,使用cookie速率快,校验快,session的速率慢校验慢;
所以一般用cookie和session结合的方式来保证安全和效率

② 使用cookie可以实现从页面中退出登录的效果

可以通过删除cookie的值来重定向到登录页面;session亦可实现

登出功能:

## 登出
def logout(request):
    response = HttpResponseRedirect("/index/")
    # 删除cookie
    response.delete_cookie("username")
    # 删除session 删除指定session 删除的是保存在服务器上面的值
    del request.session["username"]
    ## 删除所有的session
    # request.session.flush()

    return response

在装饰器中可以写一个判断,如果cookie值不存在,即跳转至登录页面
在这里插入图片描述
在给需要添加验证的页面加上装饰器,即用户无cookie无法登录页面
在这里插入图片描述


七、用前端验证和后端验证来实现注册


① 前端验证

路由:
在这里插入图片描述
写好的py文件,创建的类;forms前端验证

第一步:导包

from django import forms

第二步:创建类(字段约束和类模型的一样)
在这里插入图片描述
视图:
第一步:先从写好的py文件中导入定义好的前端验证类

from Article.forms import Register
def register(request):
	return render(request, 'register_old2.html', locals())

第二步:实例化对象
在这里插入图片描述
模板:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>注册</title>
</head>
<body>
<div>
<h3>普通的样式</h3>
{{ register_form }}
    <hr>
</div>

<div>
<h3>p标签的样式</h3>
    {{ register_form.as_p }}
    <hr>
</div>

<div>
<h3>ul标签的样式</h3>
    {{ register_form.as_ul }}
    <hr>
</div>

<div>
<h3>table标签的样式</h3>
{#    table标签和普通样式一样#}
    {{ register_form.as_table }}
    <hr>
</div>


<h3>自定义table样式</h3>
<div>
    <form action="" method="post">
    {% csrf_token %}
    <table>
        {% for one in register_form %}
        <tr>
            <th>
                {{ one.label }}
            </th>
            <td>
                {{ one }}
            </td>
        </tr>
        {% endfor %}
        <tr>
            <th>
                <input type="submit" value="提交">
            </th>
        </tr>
    </table>
    </form>
{{ content }}
</div>
</body>
</html>

前端验证自带form表单模式,但没有提交的功能,所以我们要在外面加上form表单,增加一个form的提交按钮(除了他提供的样式,我们也可以自定义样式)
在这里插入图片描述
注意:不要忘了在模板中导入实例对象,不然无法调用forms前端验证

{{ register_form }}

效果:
必须填写姓名
在这里插入图片描述
密码的填写必须和数据一模一样,最多8位,即使你写再多他都不会超过8位
在这里插入图片描述
在这里插入图片描述
添加成功
在这里插入图片描述


② 后端验证

路由:
在这里插入图片描述
写好的py文件,创建的类;写好后端验证
在这里插入图片描述
cleaned_data中的值类型与字段定义的Field类型一致。
cleaned_data 就是读取表单返回的值,返回类型为字典dict型

视图:
第一步:先从写好的py文件中导入定义好的前端验证类

from Article.forms import Register
def register(request):
	return render(request, 'register.html', locals())

第二步:实例化对象
在这里插入图片描述
模板:
在这里插入图片描述
效果:
在这里插入图片描述
在这里插入图片描述
验证成功


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值