分享

【橙子日记15】从零开始的毕业设计

 印度阿三17 2021-01-27

更新时间:2021年1月27日

昨天历经千辛万苦将系统进行了还原
今天正式开始操作
目标:
登入,注册,退出登录,模块
base控制器验证模块
前端登入注册模块
后端
关于登入注册这种东西,已经不知道弄了多少次了,现在再弄,简直就是小菜一叠,进度进展的飞快,一步到位!
登录,注册,退出处理控制器:

using CC.GraduationProject.Common;
using CC.GraduationProject.IBLL;
using CC.GraduationProject.Model;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace CC.GraduationProject.API.Controllers
{
    [Route("[controller]/[action]")]
    [ApiController]
    public class AccountController : BaseController
    {
        private IstudentBll _studentBll;
        private IteacherBll _teacherBll;
        public AccountController(IstudentBll studentBll, IteacherBll teacherBll)
        {
            IsCheck = 0;
            _studentBll = studentBll;
            _teacherBll = teacherBll;

        }


        [HttpPost]
        public async Task<IActionResult> Login([FromForm] string username, [FromForm] string pwd)//处理登录模块
        {
            //var studentData = await _studentBll.GetEntities(u => u.student_username == username).FirstOrDefaultAsync();
            //if (studentData == null)
            //{
            //    var teacherData = await _teacherBll.GetEntities(u => u.teacher_username == username).FirstOrDefaultAsync();
            //    if (teacherData == null)
            //    {
            //        return Content(JsonFactory.Json(message: "用户名或者密码错误", flag: false));//登入失败,教师学生都没有
            //    }
            //    else
            //    {
            //        if (teacherData.teacher_password == pwd)
            //        {
            //            HttpContext.Session.SetString("teacherId", teacherData.id.ToString());
            //            return Content(JsonFactory.Json(message: "欢迎!"   teacherData.teacher_username));//教师登入成功
            //        }
            //        else
            //        {
            //            return Content(JsonFactory.Json(message: "用户名或者密码错误", flag: false));
            //        }
            //    }
            //}
            //else
            //{
            //    if (studentData.student_password == pwd)
            //    {
            //        HttpContext.Session.SetString("studenId", studentData.id.ToString());
            //        return Content(JsonFactory.Json(message: "欢迎!"   studentData.student_username));//学生登入成功
            //    }
            //    else//密码错误
            //    {
            //        return Content(JsonFactory.Json(message: "用户名或者密码错误", flag: false));
            //    }
            //}
            var studentData = await _studentBll.GetEntities(u => u.student_username == username).FirstOrDefaultAsync();
            if (studentData != null)
            {
                if (studentData.student_password == pwd)
                {
                    HttpContext.Session.SetString("studentId", studentData.id.ToString());
                    return Content(JsonFactory.Json(message: "欢迎!"   studentData.student_username,data:0));//学生登入成功
                }
            }
            else
            {
                var teacherData = await _teacherBll.GetEntities(u => u.teacher_username == username).FirstOrDefaultAsync();
                if (teacherData != null)
                {
                    if (teacherData.teacher_password == pwd)
                    {
                        HttpContext.Session.SetString("teacherId", teacherData.id.ToString());
                        return Content(JsonFactory.Json(message: "欢迎您!"   teacherData.teacher_username,data:1));//教师登入成功
                    }
                }
            }
            return Content(JsonFactory.Json(message: "用户名或者密码错误", flag: false));
        }

        [HttpPost]
        public IActionResult Register([FromForm] string student_number, [FromForm] string student_name,[FromForm] string student_class,[FromForm] int student_age,[FromForm]string student_mailbox,[FromForm]string student_phone,[FromForm]string student_username,[FromForm]string pwd)
        {
            student studentData = new student();
            studentData.student_age = student_age;
            studentData.student_class = student_class;
            studentData.student_mailbox = student_mailbox;
            studentData.student_name = student_name;
            studentData.student_number = student_number;
            studentData.student_phone = student_phone;
            studentData.student_username = student_username;
            studentData.student_password = pwd;
            _studentBll.Add(studentData);
            return Redirect("/Login");
        }

        [HttpPost]
        public ActionResult LogOff()
        {
            HttpContext.Session.Clear();
            return Content(JsonFactory.Json(message: "安全退出成功!"));
        }
    }
}

注释的地方,是我写的第一版,可阅性比较差,所以我修改成了现在这种

关于base控制器也写好了

using CC.GraduationProject.Common;
using CC.GraduationProject.Model;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;

namespace CC.GraduationProject.API.Controllers
{
    public class BaseController : Controller//使用.netcore管道
    {
        public int IsCheck = 1;//设置是否需要校验用户是否登录属性
        public int studentId = 0;//0代表没有
        public int teacherId = 0;

        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
            switch (IsCheck)
            {
                case 1://表示学生获得教师登入需要检验
                    var data1 = HttpContext.Session.GetString("studentId");
                    var data2 = HttpContext.Session.GetString("teacherId");
                    if (data1 != null || data2 != null)//表示已经登入过
                    {
                        studentId = Convert.ToInt32(data1);
                        teacherId = Convert.ToInt32(data2);
                    }
                    else
                    {
                        filterContext.Result = Content(JsonFactory.Json(message: "登录已过期", flag: false));
                    }
                    break;
                case 0:
                    return;
            }
        }
    }
}

所有控制器继承于这个base,如果不需要验证,只需要在构造函数里面将ischeck改成0即可
例如:
在这里插入图片描述
由于继承了这个控制器,我们直接可以在子类控制器获取
public int studentId = 0;
public int teacherId = 0;
很舒服,现在数据不是写死的了!
这个地方,还涉及到了一点,关于.netcore的中间件使用,管道,过滤器

  public override void OnActionExecuting(ActionExecutingContext filterContext)

问题也不大
使用api操作一下,发现了都没有问题了,基本调试完毕!
现在开始前端操作
由于界面的话,我并不太感冒
就先用表单代替吧
对了,后续登入得加验证码,这里先留个坑

前端
花了2分钟,做了一个简易的表单
在这里插入图片描述

<template>

<div class="loginForm shadow-lg">
<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
  <el-form-item label="用户" prop="username">
    <el-input v-model="ruleForm.username" placeholder="请输入用户名"></el-input>
  </el-form-item>
  <el-form-item label="密码" prop="pwd" >
    <el-input v-model="ruleForm.pwd" placeholder="请输入密码"></el-input>
  </el-form-item>
  <el-form-item>
    <el-button type="primary" @click="submitForm('ruleForm')">登入</el-button>
    <el-button @click="resetForm('ruleForm')">重置</el-button>
  </el-form-item>
</el-form>
</div>

  
</template>
<script>
  export default {
    data() {
      return {
        ruleForm: {
          username: '',
          pwd: '',
        },
        rules: {
          username: [
            { required: true, message: '用户名不能为空', trigger: 'blur' },
            { min: 3, max: 20, message: '长度在 3 到 20 个字符', trigger: 'blur' }
          ],
          pwd: [
            { required: true, message: '密码不能为空', trigger: 'blur' },
            { min: 3, max: 20, message: '长度在 3 到 20 个字符', trigger: 'blur' }
          ]
       
        }
      };
    },
    methods: {
      submitForm(formName) {
        this.$refs[formName].validate((valid) => {
          if (valid) {
            alert('submit!');
          } else {
            console.log('error submit!!');
            return false;
          }
        });
      },
      resetForm(formName) {
        this.$refs[formName].resetFields();
      }
    }
  }
</script>
<style scoped>
.loginForm{
  width: 500px;
  height: 500px;
  position:absolute;
  top: 50%;
  left: 50%;
  margin-left: -250px;
  margin-top: -250px;
  background: white;
  padding: 30px;
  padding-left: 50px;
  padding-right: 50px;
}
</style>>

我们这里采用axios异步请求吧
那我们应该还得写一个api
在这里插入图片描述

运行一下果然出问题了
在这里插入图片描述
看一下报错
小问题
在这里插入图片描述
应该加this的
看看后端
在这里插入图片描述
数据已经读取到了
那一切没有问题
前端通过存储一个logged来判断是教师登入还是学生登入
0表示学生,1表示教师
然后在导航栏的时候改一下根据这个本地存储进行隐藏

现在登入有3种情况
1:用户或者密码错误
在这里插入图片描述
2:乱写,直接前端拦截
在这里插入图片描述
3:登入成功
在这里插入图片描述
登入成功将添加一个本地存储,键为logged
ok
导航栏
在这里插入图片描述
在这里插入图片描述
没问题
安全退出登入
在这里插入图片描述
在这里插入图片描述
运行一下
发现出了405的报错
在这里插入图片描述
果然是请求类型不同
在这里插入图片描述
这里应该为post请求
在这里插入图片描述
ok!
关于注册模块,一样的原理,一样一样的,暂时留个坑

不过现在出了一个问题
当我使用我新创建的学生账号的时候,我发现,并没有数据
在这里插入图片描述
这个应该是一个挺大的问题
分析问题:
这个学生为刚刚创建的测试学生,应该是没有选择任何课程的
在学生课程数据是正确的
但问题就是,在选择课程的地方,也没有课程!
在这里插入图片描述
这里的逻辑是,两个请求,一个请求所有一共有什么课程,一个是该名学生有什么课程
该学生的课程
在这里插入图片描述
一共有的课程
在这里插入图片描述
然后进行相减,就是可以选择的课程
结果出问题了
我们来看一下控制台
在这里插入图片描述
报错!
item is null
前端没发现问题,倒是后端发现了一个严重的问题
由于
在这里插入图片描述
isresult是后加的字段,所以,在查询的时候,应该排除is result为0的字段
表示正在审核,要加一个条件,is result为1 才行
在这里插入图片描述
后端这里添加一个条件
在这里插入图片描述
起飞!
这感觉!

BUG并不可怕,可怕的是,你不知道哪来的BUG

我来思考一下,为什么会造成这个原因

在这里插入图片描述
这里是遍历的item地方
也就是说,问题出在这里
在这里插入图片描述
这里是和后端数据交互的地方
那我们看看后端
在这里插入图片描述
如果我没有添加is_result的条件
那,返回的是
在这里插入图片描述
?????
????
???
??

为什么?重新运行一次,就和第一次运行的结果不一样???
第一次运行还报错了,这次为什么什么事都没有???
我吐了
这神奇的bug!

今天,就到这里了,期待下次与你相见!

来源:https://www./content-4-836701.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多