python_基于django与sqlite3的简单登录系统

基于django和sqlite3的简单登录系统

项目简介:基于django的简单登录系统,数据库实现是sqlite3

目录:

  1. 实例展示及django文件目录展示
  2. HTML文件展示
  3. django路径配置
  4. 数据库配置
  5. 后端处理
  6. 问题
  7. 改进

实例展示及django文件目录展示

登录界面
python_基于django与sqlite3的简单登录系统_第1张图片
分别是输入用户姓名,输入用户密码,登录按钮
最下面一行为登录失败原因

结果界面
python_基于django与sqlite3的简单登录系统_第2张图片
简单的结果界面,显示登录成功

django文件目录展示
python_基于django与sqlite3的简单登录系统_第3张图片

HTML文件展示

login.html


<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Logintitle>
head>
<body bgcolor="#E8E8E8 ">

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编码的数据进行比较。

你可能感兴趣的:(python,django,sqlite)