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

更新时间: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.icode9.com/content-4-836701.html

(0)

相关推荐

  • 前后端数据交互之数据接口

    废话就不多说了,我们都知道,前端通常会通过后台提供的接口来获取数据来完成前端页面的渲染. 1.前端通过接口调用后台返回的数据 <!DOCTYPE html PUBLIC "-//W3C ...

  • Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能

    写在前面   今天带给大家一个突破点选验证码的案例,利用爬虫模拟登陆哔哩哔哩,并且把一些采坑的地方给大家强调一下! 一.需求分析   模拟登陆哔哩哔哩   网站链接: https://passport ...

  • 校园日记15:A Gastrointestinal Cold

    Friday, March 12th. 2021 Cloudy by Yanyan Today I didn't feel very well. When I got up, I felt a sli ...

  • 1个“它”相当于8个橙子、15个苹果,家家吃得起,人人都爱吃

    我们一直认为水果的维生素含量最高,其实这只是我们偏见,觉得酸的东西维生素肯定更高一些.其实我们平时常吃的蔬菜所含的维生素可能要比水果的维生素更加优越.1个"它"相当于8个橙子.15 ...

  • 投资日记15:海大集团

    晚上复盘,翻了翻我的候选名单,看看有没有感兴趣的漂亮走势图,无意中翻到了我的老相好,<院士100指数>里的海大集团. 1 技术面 上图是海大集团的日线图,2020年11月26日进入女上位以 ...

  • 小学生暑假精选日记15篇!写作文对于大部...

    小学生暑假精选日记15篇!写作文对于大部分孩子来说都是个难题,孩子总是不知道怎么去表达.怎么去修饰.之所以会出现这种情况,还是因为平时练习的少,如果让孩子养成写日记或者周记的习惯,孩子就不至于在写作文 ...

  • 小张日记15:填充墙与柱脱开

    经过前期的赶工 项目总算进入了 砌筑阶段 项目规模不大 一栋框架结构的楼 质量要求却很高 创省级优质工程 某次小张到现场 检查砌筑质量 碰巧见到监理老李 两人几月不见 好一顿热啃 刚好泥工班组在 砌筑 ...

  • 不到50元!轨道射灯变身餐厅主灯,好用又好看!我家那些高性价比灯具盘点!附射灯安装攻略 | 2021装修日记15

    又亮又便宜又好看,什么灯最合适?     2019年装修,为了让媳妇满意,我买了一堆颜值灯具. 2020年装修,4万装130平,为了省钱我买了很多低价灯具. 实践证明:这俩都是坑!!   颜值吊灯,不 ...

  • 思想日记15

    传统文化里关于教育的秩序是:幼儿养性,童蒙养正,少年养志,成人养德,老年养慧,各阶段都有各阶段的任务责任和使命.每个阶段都不能跨越,只有逐步逐层累积,才会实现人生目标.

  • 垃圾分类蹲点日记 | 15小时专人值守,加快“分类速度”

    来源:紫金山新闻 "这几天小区散步,不像以前三步一排垃圾桶,周围脏兮兮的,感觉还真蛮好的""各方面都不错,有一个环节掉链子都难做好"--这几天,玄武区玄武湖街道 ...

  • 爸爸,我想更靠近你|觉察日记15

    作者:刘芳芳 国家二级心理咨询师 从业12年,个案累积2000小时 1 周六早上,我和吴老师(我的先生)都比较忙.我一般都有预约咨询,吴老师要去参加一个婚恋关系团体.于是,这周六早上,儿子核桃就被我们 ...