使用gin实现简单的注册和登录功能
一、前言
使用了gorm操作数据库,后端基于gin框架,只是一个简单的注册和登录与数据库交互的后端实现例子。
二、目录结构
-templates
--regist.html
--login.html
-main.go
三、代码
regist.html
点击查看代码
<!DOCTYPE html>
<html>
<head>
<title>注册</title>
</head>
<body>
<h1>用户注册</h1>
<form action="/register" method="POST">
<label for="username">用户名:</label>
<input type="text" name="username" required><br><br>
<label for="password">密码:</label>
<input type="password" name="password" required><br><br>
<label for="email">邮箱:</label>
<input type="text" name="email" required><br><br>
<label for="age">年龄:</label>
<input type="text" name="age" required><br><br>
<button type="submit">注册</button>
</form>
<!-- 错误信息展示 -->
{{ if .error }}
<p style="color:red">{{ .error }}</p>
{{ end }}
</body>
</html>
login.html
点击查看代码
<!DOCTYPE html>
<html>
<head>
<title>登录</title>
</head>
<body>
<h1>用户登录</h1>
<form action="/login" method="POST">
<label for="username">用户名:</label>
<input type="text" name="username" required><br><br>
<label for="password">密码:</label>
<input type="password" name="password" required><br><br>
<button type="submit">登录</button>
</form>
<!-- 错误信息展示 -->
{{ if .error }}
<p style="color:red">{{ .error }}</p>
{{ end }}
<!-- 成功信息展示 -->
{{ if .success }}
<p style="color:red">{{ .success }}</p>
{{ end }}
</body>
</html>
main.go
点击查看代码
package main
import (
"log"
"net/http"
_ "github.com/go-sql-driver/mysql"
"github.com/gin-gonic/gin"
"github.com/jinzhu/gorm"
)
var db *gorm.DB
var err error
//定义数据表
type User struct {
gorm.Model
Username string `gorm:"unique" json:"username"`
Password string `json:"password"`
Age string `json:"age"`
Email string `json:"email"`
}
//连接数据库,使用gorm
func ConDB(){
dsn :="root:root@(127.0.0.1:3306)/mydb?charset=utf8mb4&parseTime=True&loc=Local"
db,err = gorm.Open("mysql",dsn)
if err!=nil{
log.Println(err)
}
//迁移数据表
db.AutoMigrate(&User{})
}
func main() {
//注册路由
r := gin.Default()
//连接数据库
ConDB()
//加载模版
r.LoadHTMLGlob("templates/*")
//注册路由,实现登录和注册,get获取页面,post提交数据
r.GET("/register",ShowRegisterPage)
r.POST("/register",Regist)
//登录
r.GET("/login",ShowLoginPage)
r.POST("/login",Login)
r.Run(":8080")
}
//注册页面
func ShowRegisterPage(c *gin.Context){
c.HTML(http.StatusOK,"regist.html",nil)
}
//注册提交
func Regist(c *gin.Context) {
//获取表单数据
username := c.PostForm("username")
password := c.PostForm("password")
age := c.PostForm("age")
email := c.PostForm("email")
//查询用户是否存在
user :=new(User) //初始化的user是默认id=0
db.Where("username = ?",username).First(user)
log.Println(*user)
if user.ID !=0 {
c.HTML(http.StatusCreated,"regist.html",gin.H{"error":"用户已存在"})
return
} else {
newuser := User{
Username: username,
Password: password,
Age: age,
Email: email,
}
db.Create(&newuser)
c.HTML(http.StatusOK,"login.html",gin.H{"success":"注册成功,请登录"})
}
}
//登录界面
func ShowLoginPage(c *gin.Context){
c.HTML(http.StatusOK,"login.html",nil)
}
//登录路由
func Login(c *gin.Context){
//获取数据
username := c.PostForm("username")
password := c.PostForm("password")
//查询用户并验证密码
var loginuser User
db.First(&loginuser,"username = ?",username)
if loginuser.ID ==0 {
c.HTML(http.StatusBadRequest,"login.html",gin.H{"error":"用户不存在!"})
return
}else {
// log.Panicln("first:-+++++>>>",loginuser)
// log.Panicln("find::->>>>>",loginuser)
if password == loginuser.Password {
c.JSON(http.StatusOK,"登录成功!")
} else {
c.HTML(http.StatusBadRequest,"login.html",gin.H{"error":"用户名或密码错误"})
}
}
}
使用gin实现简单的注册和登录功能的更多相关文章
- 快速体验 Laravel 自带的注册、登录功能
快速体验 Laravel 自带的注册.登录功能 注册.登录经常是一件很伤脑筋的是,Laravel 提供了解决方案,可以直接使用它.试过之后,感觉真爽! 前提:本地已安装好了 PHP 运行环境.mysq ...
- 使用JFinal框架连接数据库,实现注册、登录功能
使用JFinal框架连接数据库,实现注册.登录功能 1.在Eclipse中新建Dynamic Web project项目 2.导入jfinal-2.2-bin-with-src.jar.c3p0-0. ...
- ssm整合实现注册与登录功能
最简洁易懂的SSM整合源码都在这里了 激情提示: 1.本项目是用IDEA编写的,不管你是习惯何种ide工具,那也只是工具而已,源代码才是本质 2.本项目只拥有注册和登录功能,简易的功能和详细的注释,是 ...
- java在线聊天项目1.1版 ——开启多个客户端,分别实现注册和登录功能,使用客户端与服务端信息request机制,重构线程,将单独的登录和注册线程合并
实现效果图: eclipse项目中初步整合之前的各个客户端和服务端的窗口与工具类,效果如下图: 已将注册服务器线程RegServer功能放到LoginServer中,使用客户端与服务端的request ...
- <每日一题>题目1:简单的注册和登录1.0
#版本1.0,最基本的注册登录'''1.注册,将账号和密码分别写在不同的文档里面2.登录,分别从账户文档和密码文档进行读取并登录''' #注册 Identity = input("请输入您想 ...
- java在线聊天项目1.2版 ——开启多个客户端,分别实现数据库注册和登录功能后,成功登陆则登录框消失,好友列表窗出现
登录框消失语句 dispose(); 好友列表窗出现 使用new FriendsFrame(phone,s); 登陆对话框代码修改如下: package com.swift.frame; import ...
- Net Core Identity 身份验证:注册、登录和注销 (简单示例)
一.前言 一般我们自己的系统都会用自己设置的一套身份验证授权的代码,这次用net core的identity来完成简单的注册.登录和注销. 二.数据库 首先就是创建上下文,我这里简单的建了Users和 ...
- 一步步开发自己的博客 .NET版(3、注册登录功能)
前言 这次开发的博客主要功能或特点: 第一:可以兼容各终端,特别是手机端. 第二:到时会用到大量html5,炫啊. 第三:导入博客园的精华文章,并做分类.(不要封我) 第四:做 ...
- App后台开发运维和架构实践学习总结(4)——APP的注册和登录功能设计
一.为什么需要注册和登录? 是否需要注册和登录的关键取决于产品形态. 如果用户注册登录对于用户需求.产品功能.商业模式本身带不来任何价值的话,就没必要设计这样的功能.比如一些实用工具类的产品:计算器. ...
- Node.js基于Express框架搭建一个简单的注册登录Web功能
这个小应用使用到了node.js bootstrap express 以及数据库的操作 :使用mongoose对象模型来操作 mongodb 如果没了解过的可以先去基本了解一下相关概念~ 首先注 ...
随机推荐
- VPS测试脚本,网络线路,路由测试,流媒体服务器测试脚本
收集了一些服务器测试脚本,测试性能,网络以及解锁Netflix等服务.记录收集一下,特此记录. yabs测试脚本wget -qO- yabs.sh | bash 老外比较爱用的服务器性能测试脚本. ...
- CF-957(D-E)
CF-957 赛时A去写全排列--前三题我的写法都挺丑的,后面改进了再更-- Problem - D - Codeforces 虽然是很简单很经典的线性dp,但也是我第一次自己把这种题写出来ヾ(≧▽≦ ...
- python配置国内pypi镜像源操作步骤
使用pip config命令设置默认镜像源,使用国内的源,提高安装速度 操作步骤 临时方式pip install xxx -i https://pypi.tuna.tsinghua.edu.cn/si ...
- MYSQL DQL in 到底会不会走索引&in 范围查询引发的思考。
前情引子 in 会不会走索引?很多人肯定会回答.废话.如果命中了索引.那肯定会走. 其实我和大多数人一样.一开始也是这么想的.直至有一个血淋淋的案子让我有所改观.有所思考. 背景介绍 业务的工单表.我 ...
- 2024-07-17:用go语言,给定一个整数数组nums, 我们可以重复执行以下操作: 选择数组中的前两个元素并删除它们, 每次操作得到的分数是被删除元素的和。 在保持所有操作的分数相同的前提下,
2024-07-17:用go语言,给定一个整数数组nums, 我们可以重复执行以下操作: 选择数组中的前两个元素并删除它们, 每次操作得到的分数是被删除元素的和. 在保持所有操作的分数相同的前提下, ...
- [oeasy]python0036_牛说_cowsay_小动物说话_asciiart_figlet_lolcat_管道(祝大家新年快乐~)
牛说(cowsay) 回忆上次内容 上次我们研究了shell脚本的编程 并且在shell中实现了 循环语句 延迟命令 清屏命令 python命令 figlet命令 编辑 还能整点什么呢? 还想 ...
- 手写数字识别-使用TensorFlow构建和训练一个简单的神经网络
下面是一个具体的Python代码示例,展示如何使用TensorFlow实现一个简单的神经网络来解决手写数字识别问题(使用MNIST数据集).以下是一个完整的Python代码示例,展示如何使用Tenso ...
- 10、SpringMVC之处理Ajax请求
创建名为spring_mvc_ajax的新module,过程参考9.1节和9.5节 10.1.SpringMVC处理Ajax请求 10.1.1.页面请求示例 <input type=" ...
- 英语表达中address和solve的区别
"Address" 和 "solve" 都表示处理问题,但在具体用法和含义上有所不同: Address: 含义: 处理.应对.讨论或提及问题. 强调: 关注并开 ...
- NVIDIA的OpenUSD是什么? —— Universal Scene Description (USD)
正如NVIDIA的老黄在2024年的技术大会上的展示一样,NVIDIA公司或许最准确的定义应该是计算机图形学公司,因为不论是NVIDIA搞GPU还是搞通用计算还是搞软件生态以至于现在搞AI搞机器人搞自 ...