首页 > 其他分享 >BBS首页的搭建之导航条and修改密码功能的实现

BBS首页的搭建之导航条and修改密码功能的实现

时间:2023-05-10 18:57:31浏览次数:52  
标签:return request pwd session 首页 导航条 old password BBS

目录

一、导航条的搭建

html页面

<nav class="navbar navbar-inverse">
    <div class="container-fluid">
        <!-- Brand and toggle get grouped for better mobile display -->
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                    data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="#">BBS仿博客园作业</a>
        </div>

        <!-- Collect the nav links, forms, and other content for toggling -->
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li class="active"><a href="#">新闻 <span class="sr-only">(current)</span></a></li>
                <li><a href="#">博问</a></li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                       aria-expanded="false">其他选择 <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">专区</a></li>
                        <li><a href="#">闪存</a></li>
                        <li><a href="#">班级</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">怀旧</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">发现</a></li>
                    </ul>
                </li>
            </ul>
            <form class="navbar-form navbar-left">
                <div class="form-group">
                    <input type="text" class="form-control" placeholder="学习BBS">
                </div>
                <button type="submit" class="btn btn-default">搜索</button>
            </form>
            <ul class="nav navbar-nav navbar-right">
                {% if request.session.username %}
                    <li><a href="#">{{ request.session.username }}</a></li>
                    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                           aria-expanded="false">其他功能<span class="caret"></span></a>
                        <ul class="dropdown-menu">
                            <li><a href="#">修改密码</a></li>
                            <li><a href="#">查看信息</a></li>
                            <li><a href="#">设置</a></li>
                            <li role="separator" class="divider"></li>
                            <li><a href="#">退出登录</a></li>
                        </ul>
                    </li>
                {% else %}
                    <li><a href="#">登录</a></li>
                    <li><a href="#">注册</a></li>
                {% endif %}

            </ul>
        </div><!-- /.navbar-collapse -->
    </div><!-- /.container-fluid -->
</nav>

效果:
image

二、修改密码功能的实现

这里需要用到模态框,在当前页面弹出一个页面,这样做的原因是因为比直接跳转到一个空的页面好看
https://v3.bootcss.com/javascript/#modals

html页面搭建

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.1/jquery.js"></script>
    <link rel="stylesheet" href="/static/bootstrap-3.4.1-dist/css/bootstrap.css">
    <script src="/static/bootstrap-3.4.1-dist/js/bootstrap.js"></script>
</head>
<body background="/static/img/img_2.png"
      style="background-repeat:no-repeat; background-attachment: fixed; background-size: 100% 100%">
{#导航条#}
<nav class="navbar navbar-inverse">
    <div class="container-fluid">
        <!-- Brand and toggle get grouped for better mobile display -->
        <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse"
                    data-target="#bs-example-navbar-collapse-1" aria-expanded="false">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
            </button>
            <a class="navbar-brand" href="#">BBS仿博客园作业</a>
        </div>

        <!-- Collect the nav links, forms, and other content for toggling -->
        <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
            <ul class="nav navbar-nav">
                <li class="active"><a href="#">新闻 <span class="sr-only">(current)</span></a></li>
                <li><a href="#">博问</a></li>
                <li class="dropdown">
                    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                       aria-expanded="false">其他选择 <span class="caret"></span></a>
                    <ul class="dropdown-menu">
                        <li><a href="#">专区</a></li>
                        <li><a href="#">闪存</a></li>
                        <li><a href="#">班级</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">怀旧</a></li>
                        <li role="separator" class="divider"></li>
                        <li><a href="#">发现</a></li>
                    </ul>
                </li>
            </ul>
            <form class="navbar-form navbar-left">
                <div class="form-group">
                    <input type="text" class="form-control" placeholder="学习BBS">
                </div>
                <button type="submit" class="btn btn-default">搜索</button>
            </form>
            <ul class="nav navbar-nav navbar-right">
                {% if request.session.username %}
                    <li><a href="#">{{ request.session.username }}</a></li>
                    <li class="dropdown">
                        <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true"
                           aria-expanded="false">其他功能<span class="caret"></span></a>
                        <ul class="dropdown-menu">
                            <li><a href="#" data-toggle="modal" data-target=".bs-example-modal-lg">修改密码</a></li>
                            <li><a href="#">查看信息</a></li>
                            <li><a href="#">设置</a></li>
                            <li role="separator" class="divider"></li>
                            <li><a href="#">退出登录</a></li>
                        </ul>
                    </li>
                {% else %}
                    <li><a href="#">登录</a></li>
                    <li><a href="#">注册</a></li>
                {% endif %}


            </ul>
            <!-- Large modal -->
            {#<button type="button" class="btn btn-primary" data-toggle="modal" data-target=".bs-example-modal-lg">Large modal</button>#}

            <div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog"
                 aria-labelledby="myLargeModalLabel">
                <div class="modal-dialog modal-lg" role="document">
                    <div class="modal-content">
                        <h1 class="text-center">修改密码</h1>
                        <div class="row">
                            <div class="col-md-8 col-md-offset-2">
                                <form action="">
                                    <div class="form-group">
                                        <label for="username">username:</label>
                                        <input type="text" id="username" class="form-control" disabled
                                               value="{{ request.session.username }}">
                                    </div>
                                    <div class="form-group">
                                        <label for="password">password:</label>
                                        <input type="password" id="password" class="form-control">
                                    </div>
                                    <div class="form-group">
                                        <label for="re_password">Confirm Password:</label>
                                        <input type="password" id="re_password" class="form-control">
                                    </div>
                                    <div class="form-group">
                                        <label for="old_password">old_password:</label>
                                        <input type="password" id="old_password" class="form-control">
                                    </div>
                                    <div class="form-group">
                                        <label for="old_password">Original password:</label>
                                        <input type="password" id="old_password" class="form-control">
                                    </div>
{#                                    <input type="button" class="btn btn-success btn-block" value="提交">#}
                                    <botton class="btn btn-warning btn-block">提交</botton>
                                    <br>
                                </form>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div><!-- /.navbar-collapse -->
    </div><!-- /.container-fluid -->
</nav>

修改密码后端逻辑实现

1.session登录装饰器的验证

# 登录装饰器
def login_auth(func_name):
    def inner(request, *args, **kwargs):
        if request.session.get('username'):
            res = func_name(request, *args, **kwargs)
            return res
        else:
            return redirect('/login/')
    return inner

2.阻止事件二次提交,主要针对bottom按钮在form表单中,又绑定了Ajax提交:

<script>
    $('.btn').click(function (event) {
        event.preventDefault();
        // return false
    })

3.视图函数功能逻辑的实现

@login_auth
def set_password(request):
    if request.method == 'POST':
        # 1.定义返回前端的数据格式
        back_dic = {'code': 200, 'msg': '修改成功'}

        # 2.接收参数
        new_pwd = request.POST.get('new_password')
        re_pwd = request.POST.get('re_password')
        old_pwd = request.POST.get('old_password')

        # 3.验证参数
        if new_pwd != re_pwd:
            back_dic['code'] = 1005
            back_dic['msg'] = '两次密码不一致'
            return JsonResponse(back_dic)


        # 4.判断老密码是否正确
        old_pwd = my_hashlib(old_pwd)
        is_right = models.UserInfo.objects.filter(username=request.session.get('username'),
                                                  password=old_pwd).first()
        print(is_right)
        if not is_right:
            back_dic['code'] = 1006
            back_dic['msg'] = '老密码不正确'
            return JsonResponse(back_dic)

        # 5.修改新密码
        new_pwd = my_hashlib(new_pwd)
        models.UserInfo.objects.filter(pk=request.session.get('id')).update(password=new_pwd)
        return JsonResponse(back_dic)

4.js前端页面的实现

<script src="/static/layer/layer.js"></script>
<script>
    $('.btn').click(function (event) {
        event.preventDefault();
        // return false

        // 获取参数
        var new_password = $('#password').val();
        var re_password = $('#re_password').val();
        var old_password= $('#old_password').val();

        // 2、验证参数
        if(!new_password){
            layer.msg('新密码必须填写');
            return;
        }

        if(!re_password){
            layer.msg('二次确认密码必须填写');
            return;
        }

        if(!old_password){
            layer.msg('老密码必须填写');
            return;
        }

        // 3.发起Ajax请求,把前端输入的数据提交到后端
        $.ajax({
            url:'/set_pwd/', // 这里的URL不能省略
            type: 'post',
            data: {
                new_password: new_password,
                re_password: re_password,
                old_password: old_password,
                csrfmiddlewaretoken: '{{ csrf_token }}'
            },
            success: function (res) {
                if(res.code == 200){
                    layer.msg(res.msg, {icon:1}, function () {
                        location.reload();
                    })
                } else{
                    layer.msg(res.msg,{icon: 2})
                }
            }
        })

    })

三、退出登录功能的实现

1.视图函数

# 退出登录
def logout(request):
    # 清空session
    request.session.flush()
    # 前端使用的是Ajax提交的,后端不能再跳转了,
    # 因为success的res会接收
    return redirect('/login/')

ps:不要忘记在前端加上路径/login/

标签:return,request,pwd,session,首页,导航条,old,password,BBS
From: https://www.cnblogs.com/yuezongke/p/17388971.html

相关文章

  • Vue的Router 在首页获取 fullPath 一直都是根路由‘/‘ ?
    在main.j中获取的this.$route.fullpath一直都是'/',因为给路由fullPath赋值是微任务,我们直接获取肯定只能拿到根路由“/”;解决方案:1.给路由fullPath赋值是微任务,那么只需要通过宏任务获取fullPath就可以了,setTimeout(()=>{console.log(this.$route.fullPath)},2000) 2......
  • BBS登录
    随机验证码需要导入的模块"""图片相关的模块pip3installpillow"""fromPILimportImage,ImageDraw,ImageFont"""Image:生成图片ImageDraw:能够在图片上乱涂乱画ImageFont:控制字体样式"""fromioimportBytesIO,StringIO&quo......
  • BBS注册
    models模板创建表字段如果想要在django自带的user表中增加新的字段那么需要在数据库迁移前创建就需要在在settings里面配置AUTH_USER_MODEL='app01.UserInfo'在写字段时先写普通字段之后再写外键字段models文件里面的代码fromdjango.contrib.auth.modelsimportAbstr......
  • 第二节:BBS数据库表结构设计
    目录BBS数据表表结构设计一、用户表:UserInfo二、博客表:Blog三、文章表:Article四、标签表:Tag五、分类表:Category六、评论表:Comment七、点赞点踩表:UpAndDown八、文章标签表:Tag2Article九、轮播图表Swiper(拓展)十、日志表:Log(拓展)十一、创建BBS表模型表设计十二、改配置文件......
  • BBS数据库表结构设计
    BBS数据库表结构设计在我们分析完一个项目的需求之后,我们着手开发项目所需要做的第一件事就是设计数据库的表结构及其字段。一般来说,设计一个数据库的表结构一般要注意以下三点:第一,把项目的需求转化为一个个数据库中的表第二,探寻表与表之间的关联关系第三,牢记以下原则:......
  • springsecurity 认证,授权,注销,动态菜单,记住我和首页定制
    搭建环境:1.在创建springboot时选择组件web,thymeleaf,spring-security2.导入静态资源,导入后测试一下环境 认证和授权:继承类WebSecurityConfigurerAdapter,重写方法configure若遇到报错:java.lang.IllegalArgumentException:ThereisnoPasswordEncodermappedfortheid"nu......
  • 百度首页静态展示页面HTML+CSS
    一直觉得百度首页很复杂的,有那么多的东西,跟这个博主学习了之后,仿写了一下,样式好像很简单只设置的一些组件的高度而已,不得不说,CSS真是个好东西呀话不多说,直接上代码<!DOCTYPEhtml><htmllang="en"><head><metacharset="utf-8"><title>百度首页</titl......
  • 官方教你如何快速【上首页】
    很多小伙伴都发现了,用户自主「申请上首页」的按钮取消了,那博主们写的文章还有上首页曝光的机会吗?我们的回答是“当然有!!!”虽然我们取消了上首页申请的按钮,但是我们是用了技术的力量去帮助大家自动申请了上首页申请,如果内容符合咱们标准会就审核通过,在首页展示哦~那么文章需要满足什......
  • SEO优化怎么快速把关键词优化至首页
    一、了解网页中关键词出现的位置为了确保基本的关键词密度或者网页内容相关性,关键词更多的时候应该分布在页面中的固定位置,而不是在可变因素上,像一些网站的评论、在线问答之类。如果是在页面上方的位置,就是稳定出现且不会变动的,这样的布局至少保证了在页面的一开始关键词就会出现一......
  • 使用flex弹性造APP首页轮子【前端Flex弹性布局】
    一.使用flex弹性造一个APP首页轮子这是内科大企业课(全栈开发_web前端的课程),需求如下:使用Flex弹性布局,仿写下面的页面:二.需求分析和完成步骤先分析这个页面,我们可以先写一个大的盒子,作为整个页面:<divid="content"></div>设置其为弹性布局,排列顺序为从上到下#content{......