项目简介:基于django的简单登录系统,数据库实现是sqlite3
登录界面
分别是输入用户姓名,输入用户密码,登录按钮
最下面一行为登录失败原因
login.html
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Logintitle>
head>
<body bgcolor="#E8E8E8 ">
<center>
<h1 style="margin-bottom:0">User Loginh1>
center>
div>
<form action="" method="post" style="padding-top:6px;padding-left:20px">
{% csrf_token %}
<p style="height:0">Username:p><br> <input type="text" name="user" style="width:300px;height:20px" required><br>
<p style="height:0">Password:p><br> <input type="password" name="password" style="width:300px;height:20px" required>
<div class="submit-row" style="margin-top:30px">
<input type="submit" value="Log in" style="width:100px;height:30px;margin-left:120px" name="submit">
div>
form>
div>
<p style="text-align:center">login fail,result is:{{ data }}p>
body>
html>
result.html
<html lang="en">
<head>
<meta charset="UTF-8">
<title>resulttitle>
head>
<body>
<p>login:{{data}}p>
body>
html>
django路径配置
1.settings.py配置
'DIRS': [os.path.join(BASE_DIR,'loginapp/templates')],
2.urls.py配置(全局路径配置)
from django.contrib import admin
from django.urls import path,include
urlpatterns = [
path('admin/', admin.site.urls),
path('',include('loginapp.urls'))
]
3.urls.py配置(文件内路径配置)
from django.urls import path
from . import views
urlpatterns = [
path('',views.login),
]
数据库配置
由于是简单应用,使用python自带splite3数据库进行数据库配置
在view.py里进行数据库创建和插入值
from django.shortcuts import render
import sqlite3
# Create your views here.
def database_op():
conn = sqlite3.connect("user.db") #连接数据库
c = conn.cursor()
create_table_sql = """CREATE TABLE USER
(ID INT PRIMARY KEY NOT NULL,
USERNAME TEXT NOT NULL,
PASSWORD TEXT NOT NULL);"""
c.execute(create_table_sql)
#插入数据
insert_sql_1 = "INSERT INTO USER (ID,USERNAME,PASSWORD)\
VALUES (1,'admin1','123456')"
insert_sql_2 = "INSERT INTO USER (ID,USERNAME,PASSWORD)\
VALUES (2,'admin2','123456')"
insert_sql_3 = "INSERT INTO USER (ID,USERNAME,PASSWORD)\
VALUES (3,'admin3','123456')"
c.execute(insert_sql_1)
c.execute(insert_sql_2)
c.execute(insert_sql_3)
conn.commit()
conn.close()
#进行创建数据库和插值过程
#database_op()
sqlite3详解可见菜鸟教程
https://www.runoob.com/sqlite/sqlite-python.html
后端处理
view.py中的处理
def login(request):
flag = False #返回对象
result = "user error"#登陆失败原因
if request.method == "POST":
username = request.POST.get("user",None)
password = request.POST.get("password",None)
conn = sqlite3.connect("user.db")
c = conn.cursor()
select_password_sql = "SELECT PASSWORD FROM USER WHERE USERNAME ='{}'".format(username)
cursor = c.execute(select_password_sql)
for row in cursor:
if row[0] == password:
flag = True
else:
result = "password error"
if flag == True:
return render(request,'result.html',{"data":flag})
else:
return render(request,'login.html',{"data":result})
问题
该系统中存在的主要问题有两个:
1.如果数据库代码写入view.py中,则在第一次部署django入站之后需要将代码注释,不然会提示数据库已创建。
2.如果输入的username不存在数据库中,难以返回相应的异常。即为,如果输入的username为准确的,但password是错误的,则会提示"password error",但如果username本身就是错误的,查询时不返回任何值,无法提示"username error"。(需要查看sqllite3_python官方文件)
改进
出于安全性的考虑,用户密码输入时进行md5编码,然后与数据库中md5编码的数据进行比较。