(四)简单注册登录实现

这里开始实现登录注册模块了,其实这一块算是比较简单的了,主要就是路径的问题。

  • 我们需要使用到bodyParser来处理请求的数据,所以这里需要安装一下:
npm install body-parser --save
  • 成功以后,在app.js中引入:
const bodyParser = require('body-parser');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
  • 然后继续在app.js中添加引擎模板,这个不是一定的,看自己情况改:
app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');
  • 添加路由,此时需在根目录下添加一个routes的文件夹,在文件夹下新建users.js和articles.js文件,一个处理用户登录注册的请求路径,一个管理文章的路径,然后在app.js中添加:
var articleRouter = require('./routes/articles');
var userRouter = require('./routes/users');

app.use('/home', articleRouter);
app.use('/', userRouter);
这里说明一下,这里设置完以后进入到user的路径则直接为user里设置的路径,而article中的路径则需要在前加入home方可访问,即http://localhost:端口号/home/你设置的路径
  • 注册请求实现:
const express = require('express');
//验证信息,使用前需npm install安装
const { check, validationResult } = require('express-validator');
//引入之前写好的user的数据库
let User = require('../models/user');
let router = express.Router();

// 注册
router.post('/reg', [
//检测传入数据是否为空等
    check('username').isLength({ min: 1 }).withMessage('Username is required'),
    check('email').isLength({ min: 1 }).withMessage('Email is required'),
    check("password", "invalid password")
      .isLength({ min: 1 })
      .custom((value,{req, loc, path}) => {
        return value;
      })
],function (req, res){
//这里可以输出在后端看一下,req.body即为前端传入的参数
    console.log("test", req.body);
    //username是唯一的,所以注册需要判断一下是否存在
    User.findOne({
        username: req.body.username
    }, (err, data) => {
        if(err){
            res.send('server or db error');
        }else{
        	//未重复
            if(data === null){
            	//errors是记录的前面检测的结果,若不为空,说明检测不通过
                const errors = validationResult(req);
                if (!errors.isEmpty()) {
                    console.log(errors);
                    if(errors.errors[0].param == 'username'){
                        res.json({code: 0});
                    }else if(errors.errors[0].param == 'email'){
                        res.json({code: 1});
                    }else{
                        res.json({code: 2});
                    }
                } else {
                    let user = new User({
                        username: req.body.username,
                        email: req.body.email,
                        password: req.body.password,
                    });
                    //存入数据到数据库中
                    user.save(function(err) {
                        if (err) {
                            res.json({code: 3});
                        } else {
                            console.log('save success!');
                            //返回json到前端
                            res.json({code: 200});
                        }
                    });
                }

            }else{
                res.json({code: 500});
            }
        }
    });

});
//打包模块
module.exports = router;
  • 注册前端请求
$.ajax({
        type: 'POST',
        url: 'http://127.0.0.1:8082/api/reg',
        data: user,
        success: function(data) {
                switch(data.code){
                    case 0:
                         $("#addmsg").text("用户名不能为空");
                         break;
                    case 1:
                         $("#addmsg").text("邮箱不能为空");
                         break;
                    case 2:
                         $("#addmsg").text("密码不能为空");
                         break;
                    case 3:
                         $("#addmsg").text("数据库发生错误,请重新注册");
                         break;
                    case 500:
                         $("#addmsg").text("用户名已存在");
                         break;
                }
            }
});
  • 登录请求路径:
router.post('/login', function (req, res){
    User.findOne({
        username: req.body.username
    },(err, data) => {
        if(err){
            console.log(err);
            console.log('not fund');
        }else{
            if(data === null){
                res.json({code: 0});
            }else{ 
                if(data.password === req.body.password){
                    const token = createToken({
                        id: data._id,
                        name: data.username
                    });
                    console.log('登陆成功');
                    res.json({
                        code: 200,
                        data:{
                            token: token
                        }
                    });
                }else{
                    res.json({code: 1});
                }
            }
        }
    })
});
  • 登录前端:
$.ajax({
	type: 'POST',
	url: '/api/login',//这里前面的http://12.0.0.1:8082可以省略的
	data: user,
	success: function(data) {
    	switch(data.code){
	        case 200:
       			alert("登录成功");
                sessionStorage.setItem("token",data.data.token);
                sessionStorage.setItem("username",user.username);
                window.location.href="/page/articles/home.html";
                break;
           case 0:
                $("#prompt").text("用户不存在");
                break;
           case 1:
                $("#prompt").text("密码错误");
                break;
           }
      }
});
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
在Django中,实现注册和登录功能是相对简单的。以下是一个简单的步骤: 1. 创建Django项目和应用:首先,创建一个Django项目并在项目中创建一个应用。 ```bash django-admin startproject myproject cd myproject python manage.py startapp myapp ``` 2. 定义用户模型:在你的应用的`models.py`文件中,定义一个用户模型。 ```python from django.db import models from django.contrib.auth.models import AbstractUser class User(AbstractUser): # 添加你自己的字段 pass ``` 3. 迁移数据库:运行数据库迁移指令,创建用户表。 ```bash python manage.py makemigrations python manage.py migrate ``` 4. 创建注册视图:在你的应用的`views.py`文件中,创建一个视图函数来处理用户注册请求。 ```python from django.shortcuts import render, redirect from .forms import UserRegistrationForm def register(request): if request.method == 'POST': form = UserRegistrationForm(request.POST) if form.is_valid(): form.save() return redirect('login') else: form = UserRegistrationForm() return render(request, 'registration/register.html', {'form': form}) ``` 5. 创建登录视图:在你的应用的`views.py`文件中,创建一个视图函数来处理用户登录请求。 ```python from django.shortcuts import render, redirect from django.contrib.auth import authenticate, login from .forms import UserLoginForm def user_login(request): if request.method == 'POST': form = UserLoginForm(request.POST) if form.is_valid(): username = form.cleaned_data['username'] password = form.cleaned_data['password'] user = authenticate(username=username, password=password) if user is not None: login(request, user) return redirect('home') else: form = UserLoginForm() return render(request, 'registration/login.html', {'form': form}) ``` 6. 创建注册和登录表单:在你的应用中创建一个`forms.py`文件,定义用户注册和登录的表单。 ```python from django import forms from django.contrib.auth.forms import UserCreationForm, AuthenticationForm class UserRegistrationForm(UserCreationForm): # 添加自定义字段 class Meta: model = User fields = ('username', 'password1', 'password2') class UserLoginForm(AuthenticationForm): # 添加自定义字段 pass ``` 7. 创建模板:创建注册和登录的HTML模板文件,并把表单渲染到模板中。 8. 配置URL:在你的应用的`urls.py`文件中配置注册和登录的URL路由。 ```python from django.urls import path from .views import register, user_login urlpatterns = [ path('register/', register, name='register'), path('login/', user_login, name='login'), ] ``` 以上是一个简单实现注册和登录功能的步骤。当然,你可以根据自己的需求进行更加复杂的实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值