Flask項目--注冊

0.效果展示

在這里插入圖片描述

1.后端代碼

在這里插入圖片描述

# coding:utf-8from . import api
from flask import request, jsonify, current_app, session
from ihome.utils.response_code import RET
from ihome import redis_store, db, constants
from ihome.models import User
from sqlalchemy.exc import IntegrityError
import re@api.route("/users", methods=["POST"])
def register():"""注冊請求的參數: 手機號、短信驗證碼、密碼、確認密碼參數格式:json"""# 獲取請求的json數據,返回字典req_dict = request.get_json()mobile = req_dict.get("mobile")sms_code = req_dict.get("sms_code")password = req_dict.get("password")password2 = req_dict.get("password2")# 校驗參數if not all([mobile, sms_code, password, password2]):return jsonify(errno=RET.PARAMERR, errmsg="參數不完整")# 判斷手機號格式if not re.match(r"1[34578]\d{9}", mobile):# 表示格式不對return jsonify(errno=RET.PARAMERR, errmsg="手機號格式錯誤")if password != password2:return jsonify(errno=RET.PARAMERR, errmsg="兩次密碼不一致")# 從redis中取出短信驗證碼try:real_sms_code = redis_store.get("sms_code_%s" % mobile)except Exception as e:current_app.logger.error(e)return jsonify(errno=RET.DBERR, errmsg="讀取真實短信驗證碼異常")# 判斷短信驗證碼是否過期if real_sms_code is None:return jsonify(errno=RET.NODATA, errmsg="短信驗證碼失效")# 刪除redis中的短信驗證碼,防止重復使用校驗try:redis_store.delete("sms_code_%s" % mobile)except Exception as e:current_app.logger.error(e)# 判斷用戶填寫短信驗證碼的正確性if real_sms_code != sms_code:return jsonify(errno=RET.DATAERR, errmsg="短信驗證碼錯誤")# 判斷用戶的手機號是否注冊過# try:#     user = User.query.filter_by(mobile=mobile).first()# except Exception as e:#     current_app.logger.error(e)#     return jsonify(errno=RET.DBERR, errmsg="數據庫異常")# else:#     if user is not None:#         # 表示手機號已存在#         return jsonify(errno=RET.DATAEXIST, errmsg="手機號已存在")# 鹽值   salt#  注冊#  用戶1   password="123456" + "abc"   sha1   abc$hxosifodfdoshfosdhfso#  用戶2   password="123456" + "def"   sha1   def$dfhsoicoshdoshfosidfs## 用戶登錄  password ="123456"  "abc"  sha256      sha1   hxosufodsofdihsofho# 保存用戶的注冊數據到數據庫中user = User(name=mobile, mobile=mobile)# user.generate_password_hash(password)user.password = password  # 設置屬性try:db.session.add(user)db.session.commit()except IntegrityError as e:# 數據庫操作錯誤后的回滾db.session.rollback()# 表示手機號出現了重復值,即手機號已注冊過current_app.logger.error(e)return jsonify(errno=RET.DATAEXIST, errmsg="手機號已存在")except Exception as e:db.session.rollback()# 表示手機號出現了重復值,即手機號已注冊過current_app.logger.error(e)return jsonify(errno=RET.DBERR, errmsg="查詢數據庫異常")# 保存登錄狀態到session中session["name"] = mobilesession["mobile"] = mobilesession["user_id"] = user.id# 返回結果return jsonify(errno=RET.OK, errmsg="注冊成功")

在這里插入圖片描述
modle.py中
在這里插入圖片描述

class User(BaseModel, db.Model):"""用戶"""__tablename__ = "ih_user_profile"id = db.Column(db.Integer, primary_key=True)  # 用戶編號name = db.Column(db.String(32), unique=True, nullable=False)  # 用戶暱稱password_hash = db.Column(db.String(128), nullable=False)  # 加密的密碼mobile = db.Column(db.String(11), unique=True, nullable=False)  # 手機號real_name = db.Column(db.String(32))  # 真實姓名id_card = db.Column(db.String(20))  # 身份證號avatar_url = db.Column(db.String(128))  # 用戶頭像路徑houses = db.relationship("House", backref="user")  # 用戶發布的房屋orders = db.relationship("Order", backref="user")  # 用戶下的訂單# 加上property裝飾器后,會把函數變為屬性,屬性名即為函數名@propertydef password(self):"""讀取屬性的函數行為"""# print(user.password)  # 讀取屬性時被調用# 函數的返回值會作為屬性值# return "xxxx"raise AttributeError("這個屬性只能設置,不能讀取")# 使用這個裝飾器, 對應設置屬性操作@password.setterdef password(self, value):"""設置屬性  user.passord = "xxxxx":param value: 設置屬性時的數據 value就是"xxxxx", 原始的明文密碼:return:"""self.password_hash = generate_password_hash(value)# def generate_password_hash(self, origin_password):#     """對密碼進行加密"""#     self.password_hash = generate_password_hash(origin_password)

2.注冊html代碼

在這里插入圖片描述

<!DOCTYPE html>
<html>
<head> <meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"><title>愛家-注冊</title><link href="/static/plugins/bootstrap/css/bootstrap.min.css" rel="stylesheet"><link href="/static/plugins/font-awesome/css/font-awesome.min.css" rel="stylesheet"><link href="/static/css/reset.css" rel="stylesheet"><link href="/static/css/ihome/main.css" rel="stylesheet"><link href="/static/css/ihome/register.css" rel="stylesheet">
</head>
<body><div class="container"><div class="logo-bar"><a href="/"><img src="/static/images/logo@128x59.png"></a></div><form class="form-register"><div class="form-group form-group-lg"><div class="input-group"><div class="input-group-addon"><i class="fa fa-mobile fa-2x fa-fw"></i></div><input type="number" class="form-control" name="mobile" id="mobile" placeholder="手機號" required></div></div><div class="error-msg" id="mobile-err"><i class="fa fa-exclamation-circle"></i><span></span></div><div class="form-group form-group-lg"><div class="input-group"><div class="input-group-addon"><i class="fa fa-image fa-lg fa-fw"></i></div><input type="text" class="form-control" name="imagecode" id="imagecode" placeholder="圖片驗證碼" required><div class="input-group-addon image-code" onclick="generateImageCode();"><img src=""></div></div></div><div class="error-msg" id="image-code-err"><i class="fa fa-exclamation-circle"></i><span></span></div><div class="form-group form-group-lg"><div class="input-group"><div class="input-group-addon"><i class="fa fa-envelope-o fa-lg fa-fw"></i></div><input type="text" class="form-control" name="phonecode" id="phonecode" placeholder="短信驗證碼" required><div class="phonecode input-group-addon"><a class="phonecode-a" href="javascript:;" onclick="sendSMSCode();">獲取驗證碼</a></div></div></div><div class="error-msg" id="phone-code-err"><i class="fa fa-exclamation-circle"></i><span></span></div><div class="form-group form-group-lg"><div class="input-group"><div class="input-group-addon"><i class="fa fa-lock fa-lg fa-fw"></i></div><input type="password" class="form-control" name="password" id="password" placeholder="密碼" required></div></div><div class="error-msg" id="password-err"><i class="fa fa-exclamation-circle"></i><span></span></div><div class="form-group form-group-lg"><div class="input-group"><div class="input-group-addon"><i class="fa fa-lock fa-lg fa-fw"></i></div><input type="password" class="form-control" name="password2" id="password2" placeholder="確認密碼" required></div></div><div class="error-msg" id="password2-err"><i class="fa fa-exclamation-circle"></i><span></span></div><button type="submit" class="btn btn-lg btn-theme btn-block">立即注冊</button><p class="login-a">已有賬號,<a href="/login.html">立即登陸</a></p></form></div><script src="/static/js/jquery.min.js"></script><script src="/static/plugins/bootstrap/js/bootstrap.min.js"></script><script src="/static/js/ihome/register.js"></script>
</body>
</html>

3.注冊js代碼

在這里插入圖片描述

$(document).ready(function() {generateImageCode();$("#mobile").focus(function(){$("#mobile-err").hide();});$("#imagecode").focus(function(){$("#image-code-err").hide();});$("#phonecode").focus(function(){$("#phone-code-err").hide();});$("#password").focus(function(){$("#password-err").hide();$("#password2-err").hide();});$("#password2").focus(function(){$("#password2-err").hide();});// 為表單的提交補充自定義的函數行為 (提交事件e)$(".form-register").submit(function(e){// 阻止瀏覽器對于表單的默認自動提交行為e.preventDefault();var mobile = $("#mobile").val();var phoneCode = $("#phonecode").val();var passwd = $("#password").val();var passwd2 = $("#password2").val();if (!mobile) {$("#mobile-err span").html("請填寫正確的手機號!");$("#mobile-err").show();return;} if (!phoneCode) {$("#phone-code-err span").html("請填寫短信驗證碼!");$("#phone-code-err").show();return;}if (!passwd) {$("#password-err span").html("請填寫密碼!");$("#password-err").show();return;}if (passwd != passwd2) {$("#password2-err span").html("兩次密碼不一致!");$("#password2-err").show();return;}// 調用ajax向后端發送注冊請求var req_data = {mobile: mobile,sms_code: phoneCode,password: passwd,password2: passwd2,};var req_json = JSON.stringify(req_data);$.ajax({url: "/api/v1.0/users",type: "post",data: req_json,contentType: "application/json",dataType: "json",headers: {"X-CSRFToken": getCookie("csrf_token")}, // 請求頭,將csrf_token值放到請求中,方便后端csrf進行驗證success: function (resp) {if (resp.errno == "0") {// 注冊成功,跳轉到主頁location.href = "/index.html";} else {alert(resp.errmsg);}}})});
})

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/452677.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/452677.shtml
英文地址,請注明出處:http://en.pswp.cn/news/452677.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

圖片處理

//圖片處理public function img(){//讀取圖片$imageImage::open(./img/02.jpg);//dump($image);//獲取圖片的信息// 返回圖片的寬度$width $image->width();// 返回圖片的高度$height $image->height();// 返回圖片的類型$type $image->type();// 返回圖片的mime類…

react 項目總結

前言 最近在寫一個項目,在寫react的過程中遇到過很多坑,現在總結一下,為以后的項目作參考.另外借此項目來比較一下 vue.js 和 react.js 之間的一些異同. 先說說組件 剛剛開始寫組件的時候&#xff0c;感覺難度不大&#xff08;跟vue差不多&#xff09;。最有意思的應該是jsx語法…

現代數字影視 電影使用標準

1、國際數字電影標準1&#xff09;DCI&#xff08;Digital Cinema Initiatives數字影院系統規范&#xff09;美國好萊塢七大制片公司——Disney、MGM、Fox、Paramount Pictures、Sony Pictures Entertainment、Universal Studios和Warner Bros于2002年聯合成立了DCI機構&#x…

數據流圖 系統流程圖 程序流程圖 系統結構圖聯系與區別

1.數據流圖&#xff08;Data Flow Diagram&#xff09;&#xff0c;簡稱DFD&#xff0c;它從數據傳遞和加工角度&#xff0c;以圖形方式來表達系統的邏輯功能、數據在系統內部的邏輯流向和邏輯變換過程&#xff0c;是結構化系統分析方法的主要表達工具及用于表示軟件模型的一種…

Linux--安裝yum源

linux配置yum源 一、修改yum的配置文件 /etc/yum.repos.d/xxx.repo 1、進入yum配置文件目錄 # cd /etc/yum.repos.d 2、刪除全部原有的文件 # rm -rf * 3、新建一個yum的配置文件 # vi my.repo [myrepo] 標識配置文件名稱&#xff08;名字隨意&#xff09; namemyrepo 標識yum …

在 Confluence 6 中禁用 workbox 應用通知

如果你選擇 不提供應用通知&#xff08;does not provide in-app notifications&#xff09;&#xff1a; Confluence workbox 圖標將不會可見同時用戶也不能在這個服務器上訪問 workbox。這個 Confluence 服務器將不會發送消息到 workbox 中&#xff0c;同時也不會發送消息到其…

迄今為止最快的 JSON 序列化工具 Jil

2019獨角獸企業重金招聘Python工程師標準>>> 迄今為止最快的 JSON 序列化工具 Jil https://github.com/kevin-montrose/Jil 轉載于:https://my.oschina.net/xainghu/blog/1621365

mysql數據庫訪問編程,mysql 連接數據庫

1、首先啟動mysql 并鏈接數據 小意思吧&#xff01;都會了是吧mysql -uroot -p //連接數據net start mysql // 啟動mysql2、查詢當前 服務器里有哪些數據show databases;3、創建數據庫create database jddb -------數據庫名字(jddb)4、 使用數據庫use jddb;5、查詢當前數據庫下…

linux多線程 pthread用法

#include int pthread_create(pthread_t *restrict tidp,const pthread_attr_t *restrict attr, void *(*start_rtn)(void),void *restrict arg); Returns: 0 if OK, error number on failure 第一個參數為指向線程標識符的指針。 第二個參數用來設置線程屬性。 第三個參數是…

什么是數據字典

數據字典是指對數據的數據項、數據結構、數據流、數據存儲、處理邏輯、外部實體等進行定義和描述&#xff0c;其目的是對數據流程圖中的各個元素做出詳細的說明。 數據字典最重要的作用是作為分析階段的工具。任何字典最重要的用途都是供人查詢對不了解的條目的解釋&#xff0c…

Flsak愛家租房--個人信息

0.頁面展示效果 1.設置用戶頭像–后端代碼 # coding:utf-8from . import api from ihome.utils.commons import login_required from flask import g, current_app, jsonify, request, session from ihome.utils.response_code import RET from ihome.utils.image_storage impo…

json返回值為null顯示key值的設置

使用的是阿里的json ----------com.alibaba.fastjson.JSONObject; Map<String,Object> map new HashMap<String,Object>(); return JSONObject.toJSONString(map); --------轉義的時候&#xff0c;map中值是null的字段會被忽略掉&#xff0c;轉義的json沒有帶n…

C++ string::size_type

從邏輯上講&#xff0c;size()成員函數應該似乎返回整型數值&#xff0c;但事實上&#xff0c;size操作返回是string::size_type類型的值。string類類型和其他許多庫類型都定義了一些配套類型(companion type)。通過這些配套類型&#xff0c;庫函數的使用就與機器無關(machine-…

需求分遵循的準則

?必須理解并描述問題的信息域&#xff0c;根據這條準則應該建立數據模型。 ?必須定義軟件應完成的功能&#xff0c;這條準則要求建立功能模型。 ?必須描述作為外部事件結果的軟件行為&#xff0c;這條準則要求建立行為模型 ?必須對描述信息、功能和行為的模型進行分解&…

MATLAB顯示錯誤使用untitled,新手,用gui界面畫李薩如圖,出錯,求解答

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓function varargout untitled1(varargin)% UNTITLED1 MATLAB code for untitled1.fig% UNTITLED1, by itself, creates a new UNTITLED1 or raises the existing% singleton*.%% H UNTITLED1 returns the handle to a new UNTITL…

軟件開發如同木匠做桌子

做一張桌子看起來十分的簡單。任何人都可以做&#xff0c;不是嗎&#xff1f;找個大塊的四方形木板&#xff0c;四個等長的木頭柱子&#xff0c;四個釘子和一個錘子。把四個柱子釘到四方板的四個角上&#xff0c;你就做成了一個桌子。當當當&#xff01; 現在來讓一個真正的木…

Django加載靜態文件

方法一: 1.在app目錄中創建static 目錄&#xff0c;并在該目錄下創建存儲css,img,js的子目錄&#xff0e; 2.在相應的目錄下創建相對應的靜態文件. static/css/mystyle.css, static/img/timg.jpg,(保存圖片) static/js/myjs.js 3.在模板文件中加載靜態文件 例: mystyle.css: bo…

Flsak愛家租房--實名認證

0.頁面展示效果 1.設置用戶實名認證信息–后端代碼 api.route("/users/auth", methods["POST"]) login_required def set_user_auth():"""保存實名認證信息"""user_id g.user_id# 獲取參數req_data request.get_json()if …

IntelliJ 啟動不同端口的兩個spring cloud項目

IntelliJ 啟動不同端口的兩個spring cloud項目 1&#xff0c;使用maven進行clean package 2&#xff0c;在Terminal界面&#xff0c;輸入java -jar xxx.jar --server.port8001就可以更換server的啟動端口了&#xff1b;

python sort怎么用,Linux Sort命令詳細用法(有實例)

Linux Sort命令詳細用法(有實例)sort是在Linux里非常常用的一個命令&#xff0c;管排序的&#xff0c;集中精力&#xff0c;五分鐘搞定sort&#xff0c;現在開始&#xff01;Linux sort命令進階&#xff1a;1 sort的工作原理sort將文件的每一行作為一個單位&#xff0c;相互比較…