如何在Python中创建一个用户登录网络系统

169 阅读5分钟

如何在Python中创建一个用户登录网络系统

最近,我开始了一个项目的工作,我必须弄清楚如何创建一个用户登录系统来保护网站不被非法访问。在本教程中,我将向你展示如何在Ubuntu服务器18.04上用Python制作同样的系统。

设置先决条件的软件

开始时,无论项目或最终目标是什么,我们都建议先运行以下命令。

sudo apt-get update && sudo apt-get upgrade -y

sudo apt-get install cmake build-essential -y

之后,你需要通过运行以下命令来安装Python开发软件和MySQL开发客户端。

sudo apt-get install python python-pip python-dev libmysqlclient-dev python-mysql.connector python3-mysql.connector -y

现在我们安装MariaDB作为我们的数据库,在这里我们将存储我们的用户名和散列密码。

sudo apt-get install mariadb-server -y

一旦安装完毕,运行下面的命令来设置一个用户、数据库和表,以便将我们的Python代码连接到上面。

sudo mysql

现在运行。

CREATE USER 'chooseAUserName'@'localhost' IDENTIFIED BY 'chooseAPassword';

然后运行。

GRANT ALL PRIVILEGES ON *.* TO 'chooseAUserName'@'localhost' WITH GRANT OPTION;
exit

现在我们将安装一些我们需要的Python库。

pip install flask
pip install flask-sqlalchemy
pip install flask-login
pip install passlib

设置用户

现在,我们要设置用户数据库并添加一些用户。首先,通过运行: 连接到MariaDB。

sudo mysql

接下来,创建一个名为Login 的新数据库。

CREATE DATABASE Login;

然后,进入该数据库,这样我们就可以添加一个容纳用户的表。

USE Login;

并创建该表。

CREATE TABLE Login (uid INT(11) AUTO_INCREMENT PRIMARY KEY, username VARCHAR(100), password VARCHAR(200), email VARCHAR(200));
exit

现在,为了创建用户,我们实际上将创建一个小的Python程序来向数据库添加用户。

你将需要打开一个tmux实例,这样我们就可以在编辑文件的同时,仍然让Python程序在后台运行。要做到这一点,请遵循这一系列的命令。

tmux
mkdir pythonlogin
nano newUser.py

打开这个文件,复制并粘贴以下代码。

from flask import Flask, render_template, request
from passlib.hash import sha256_crypt
import mysql.connector as mariadb
app = Flask(__name__)
maraidb_connection = mariadb.connect(user='chooseAUserName', password='chooseAPassword', database='Login')
@app.route('/')
def index():
  username = "newUserName"
  password = sha256_crypt.encrypt("newPassword")
  email = "what@ever.com"

  cur = mariadb_connection.cursor()
  cur.execute('INSERT INTO Login (username, password, email) VALUES (%s, %s, %s)', (username, password, email))
  mariadb_connection.commit()
  cur.close()

  return "New user added"
if __name__ == '__main__':
  app.run(debug=True, host='0.0.0.0', port='5000')

现在,关闭并保存该文件,按control x,y,enter,enter

现在,当仍然在tmux中运行时。

newUser.py

然后按control b ,然后按d ,暂时退出tmux。

现在运行。

curl ipinfo.io/ip

并在另一台计算机的浏览器中输入产生的IP,输入 yourIP:5000/ 你现在已经添加了你的第一个用户。要添加另一个用户,请运行。

nano newUser.py

并更改用户名、密码和电子邮件字段。现在像上面那样保存并退出。然后在另一台电脑上刷新网页,你就成功添加了另一个用户。你可以通过重复这个过程来添加你想要的用户。

一旦你添加了所有你希望的用户,运行。

tmux attach

然后,按control c ,接着按control d

Python编程

现在我们已经设置了一些用户,让我们为登录系统编写Python代码,并浏览一下它的作用。

首先,通过运行创建一个新文件。

nano main.py

文件打开后,你可以复制和粘贴或输入以下代码。

from flask import Flask
from flask import Flask, flash, redirect, render_template, request, session, abort
from passlib.hash import sha256_crypt
import mysql.connector as mariadb
import os
import operator
app = Flask(__name__)
mariadb_connect = mariadb.connect(user='chooseAUserName', password='chooseAPassword', databse='Login')
@app.route('/')
def home():
  if not session.get('logged_in'):
    return render_template('login.html')
  else:
    return render_template('index.html')

@app.route('/login', methods=['POST'])
def do_admin_login():
  login = request.form

  userName = login['username']
  password = login['password']

  cur = mariadb_connect.cursor(buffered=True)
  data = cur.execute('SELECT * FROM Login WHERE username=%s', (userName))
  data = cur.fetchone()[2]

  if sha256_crypt.verify(password, data):
    account = True

  if account:
    session['logged_in'] = True
  else:
    flash('wrong password!')
  return home()

@app.route('logout')
def logout():
  session['logged_in'] = False
  return home()

if __name__ == "__main__":
  app.secret_key = os.urandom(12)
  app.run(debug=False,host='0.0.0.0', port=5000)

在这个文件中,我们将首先导入我们需要的Python库。然后我们将连接到数据库本身。第一个函数确定一个用户是否已经登录,如果没有,则向他们显示登录页面。

然后,在do_admin_login 函数中,我们从网络表格中获得用户的输入,对他们的密码进行散列,并与我们数据库中的散列密码进行验证。如果返回真,用户现在已经登录,并重定向到index.html (我们的主页)。

我们还包括一个注销功能,允许用户通过点击一个链接来注销。最后,我们将主机设置为0.0.0.0 ,这意味着我们对外部用户(不在同一台电脑上)的主机是5000端口。

HTML和CSS

我们现在需要用HTML和CSS来创建登录网页。

首先运行。

mkdir templates

然后。

nano login.html

打开该文件,复制并粘贴以下内容。

 <style>
 * {
box-sizing: border-box;
}
*:focus {
outline: none;
}
body {
font-family: Arial;
background-color: #E55423;
padding: 50px;
}
.login {
margin: 20px auto;
width: 300px;
}
.login-screen {
background-color: #FFF;
padding: 20px;
border-radius: 5px
}
.app-title {
text-align: center;
color: #777;
}
.login-form {
text-align: center;
}
.control-group {
margin-bottom: 10px;
}
input {
text-align: center;
background-color: #ECF0F1;
border: 2px solid transparent;
border-radius: 3px;
font-size: 16px;
font-weight: 200;
padding: 10px 0;
width: 250px;
transition: border .5s;
}
input:focus {
border: 2px solid #3498DB;
box-shadow: none;
}
.btn {
border: 2px solid transparent;
background: #E55423;
color: #ffffff;
font-size: 16px;
line-height: 25px;
padding: 10px 0;
text-decoration: none;
text-shadow: none;
border-radius: 3px;
box-shadow: none;
transition: 0.25s;
display: block;
width: 250px;
margin: 0 auto;
}
.btn:hover {
background-color: #E55423;
}
.login-link {
font-size: 12px;
color: #444;
display: block;
margin-top: 12px;
}  
 </style>
 <title>Login</title>
{% block body %}
<form action="/lgoin" method="POST">
<div class="login">
  <div class="login-screen">
    <div class="app-title">
      <h1>Login</h1>
    </div>
  <div class="login-form">
    <div class="control-group">
        <input type="text" class="login-field" value="" placeholder="username" name="username">
        <label class="login-field-icon fui-user" for="login-name"></label>
    </div>
    <div class="control-group">
        <input type="password" class="login-field" value="" placeholder="password" name="password">
        <label class="login-field-icon fui-lock" for="login-pass"></label>
    </div>
     <input type="submit" value="Log in" class="btn btn-primary btn-large btn-block">
   </div>
  </div>
 </div>
</form>
{% endblock %}

现在我们已经完成了登录页面,让我们创建一个简单的主页。

在同一位置创建并打开一个新文件。

nano index.html

复制并粘贴下面的代码。

<!DOCTYPE html>
<html>

<head>
  <title>Welcome</title>  
</head>

<body>
  <div class="welcome">
    <center>
      <h1>
        <font size="13" color="black">
           Welcome
        </font>
      </h1>
    </center>
  </div>

  <center>
    <hr>
  </center>

  <center>
    <a href="/logout">Logout</a>
  </center>

  <div class="breaker">
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
    <br />
  </div>

  <div class="footer">
    <footer style="position: fixed; left: 2; right: 2; width: 95%; bottom: 0;">
      <center>
        This webpage is only accessible behind a User Web Login System written in Python
      </center>
    </footer>
  </div>
</body>

</html>

现在我们可以通过键入cd ../ ,退出模板文件夹,我们就可以开始运行了

测试你的代码

现在你已经写好了代码,我们可以运行它并在浏览器中试用。要做到这一点,请运行。

main.py

现在你可以通过访问我们在创建用户时使用的相同链接来访问该系统。yourIP:5000/

祝贺你!你现在已经在Python中为一个网站创建了一个用户登录系统!现在你可以用私人网页创建你自己的网站,在那里你可以做一些事情,比如写一个私人日记,存储你的笔记或其他文件,以及更多。让你的想象力发挥到极致,创造出惊人的东西。