Python:Django实现注册登录功能
ps:1.因为菜所以还没有使用加密方法和对密码进行加密存储,表单使用的get,密码明文存储
2.使用的mysql数据库,python连接mysql,需要安装pymysql,可以pip install pymysql
3.win10,python3.9,django4.0,mysql5.7
1.创建用户表
使用已有的数据库创建好对应的用户表以存储账号密码信息,表中至少包含账号、密码两个字段
2.html实现注册、登录页面
ps:form表单中的{% csrf_token %}是由于Django的验证机制需要添加的。
register.html如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>注册</title> </head> <body> <h1> <p style="text-align:center">注册页面</p> </h1> <form action="save" method="get"> {% csrf_token %} <p style="text-align:center">账号:<input id="username" type="username" name="username" required /></p> <p style="text-align:center">密码:<input id="password" type="password" name="password" required /></p> <p style="text-align:center"> <input onsubmit="check()" type="submit" value="注册" /></p> </form> </body> </html>
login.html如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>登录</title> <style> p{ text-align: center; } </style> </head> <body> <h1> <p style="text-align:center">登录页面</p> </h1> <form action="query" method="get"> {% csrf_token %} <p>用户:<input type="username" name="username" /></p> <p>密码:<input type="password" name="password"/></p> <p> <input type="submit" value="登录" /> <p><a href="http://127.0.0.1:8000/register/">前往注册</a></p> </form> </body> </html>
3.创建Djiango的app
在Django项目终端中,执行命令创建app
.\manager.py startapp appname
4.注册和登录后台逻辑实现
在创建的app下的views.py中,编写注册登录逻辑:
from ssl import AlertDescription from django.http import HttpResponseRedirect, response from django.shortcuts import redirect, render # Create your views here. from django.contrib import admin from django.urls import path from django.shortcuts import render from django.shortcuts import HttpResponse import pymysql #登录页面 def login(request): #指定要访问的页面,render的功能:讲请求的页面结果提交给客户端 return render(request,'login.html') #注册页面 def register(request): return render(request,'register.html') #定义一个函数,用来保存注册的数据 def save(request): has_regiter = 0#用来记录当前账号是否已存在,0:不存在 1:已存在 a = request.GET#获取get()请求 #通过get()请求获取前端提交的数据 userName = a.get('username') passWord = a.get('password') #print(userName,passWord) #连接数据库 db = pymysql.connect(host='localhost',port=3306,user='root',passwd='password123',db='test') #创建游标 cursor = db.cursor() #SQL语句 sql1 = 'select * from mywebusers' #执行SQL语句 cursor.execute(sql1) #查询到的所有用户账号存储到all_users中 all_users = cursor.fetchall() i = 0 while i < len(all_users): if userName in all_users[i]: ##表示该账号已经存在 has_regiter = 1 i += 1 if has_regiter == 0: # 将用户名与密码插入到数据库中 sql2 = 'insert into mywebusers(username,password) values(%s,%s)' cursor.execute(sql2,(userName,passWord)) db.commit() cursor.close() db.close() #注册成功后跳转到登录页面 return HttpResponseRedirect('/login') else: cursor.close() db.close() return HttpResponse('该账号已存在') def query(request): a = request.GET userName = a.get('username') passWord = a.get('password') loginInfo = (userName,passWord) db = pymysql.connect(host='localhost',port=3306,user='root',passwd='password123',db='test') cursor = db.cursor() sql = 'select username,password from mywebusers' cursor.execute(sql) all_users = cursor.fetchall() cursor.close() db.close() has_user = 0 i = 0 while i < len(all_users): if loginInfo == all_users[i]: has_user = 1 i += 1 if has_user == 1: return HttpResponse('登录成功') else: return HttpResponse('用户名或密码有误')
5.项目文件配置
1.在已创建的Django项目下,创建templates文件夹,用来存放注册和登录页面
2.在Django项目的urls.py文件中,配置项目访问路径:
from django.contrib import admin from django.urls import path from webApp.views import login from webApp.views import register from webApp.views import save from webApp.views import query urlpatterns = [ path('admin/', admin.site.urls),#系统默认创建的 path('login/',login),#访问登录页面 path('register/',register),#访问注册页面 path('register/save',save),#注册页面表单中的save交给后台save函数处理 path('login/query',query)#登录页面表单中的query交给后台query函数处理 ]
3.在项目文件的settings.py文件中,配置创建的app以及存放注册登录页面的文件夹
配置app:
找到如下内容,添加已经创建的app:
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'webApp',#添加app ]
配置使用的存放注册登录页面文件夹:
找到如下内容,修改DIRS对应行内容,文件中需要import os
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR,'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
6.启动项目访问
.\manager.py runserver启动项目,访问试试!!