Django项目:注册登录页面
目录
- 一、创建项目
- 二、优化settings
- 三、创建管理注册登录的用户模型(默认使用自带的sqlite3数据库)
- 创建模型
- 迁移数据
- 查看数据库
- 四、创建模板、编辑视图、添加路由
- 1、创建注册模板、视图、路由
- 注册模板
- 注册视图
- 注册路由
- 启动站点服务
- 浏览器访问并注册
- 2、创建登录模板、视图、路由
- 登录模板
- 登录视图
- 登录路由
- 3、创建首页模板、视图、路由
- 首页模板
- 首页视图
- 首页路由
- 4、实现注销功能
- 不需要注销模板
- 注销视图
- 注销路由
- 1、创建注册模板、视图、路由
- 五、浏览器注册、登录、注销测试
一、创建项目
二、优化settings
三、创建管理注册登录的用户模型(默认使用自带的sqlite3数据库)
创建模型
代码:
class User(models.Model):
username=models.CharField(max_length=30,unique=True)
password=models.CharField(max_length=30)
telephone=models.CharField(max_length=11)
迁移数据
python manage.py makemigrations
python manage.py migrate
查看数据库
已经生成字段,暂时数据
四、创建模板、编辑视图、添加路由
1、创建注册模板、视图、路由
注册模板
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>用户注册</title>
</head>
<body>
<h2>用户注册</h2>
<hr>
<form action="" method="post">
{% csrf_token %}
<p>用户名: <input type="text" name="username"></p>
<p>密 码: <input type="password" name="password"></p>
<p>电 话: <input type="text" name="telephone"></p>
<p><button>注册</button></p>
</form>
</body>
</html>
注册视图
代码:
from django.http import HttpResponse
from django.shortcuts import render, redirect
from App.models import *
def register(request):
if request.method == 'GET':
return render(request,'register.html')
elif request.method == 'POST':
username=request.POST.get('username')
password=request.POST.get('password')
telephone=request.POST.get('telephone')
print(username,password,telephone)
if not username:
return HttpResponse('用户名必填')
elif not password:
return HttpResponse('密码必填')
elif not telephone:
return HttpResponse('电话必填')
users=User.objects.filter(username=username) #先判断用户是否已经存在
if users.exists():
return HttpResponse('用户已经存在')
else:
try:
User.objects.create(username=username,password=password,telephone=telephone)
return redirect('login') #跳转到登录视图
except Exception as e:
return HttpResponse(f'注册用户出错了:{e}')
注册路由
使用的是根路由,没有做路由分发
启动站点服务
python manage.py runserver
浏览器访问并注册
此时注册成功也不会跳转到登录页面,还没创建!
2、创建登录模板、视图、路由
登录模板
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登录</title>
<style type="text/css"> {#a标签去下划线#}
a {
text-decoration: none;
}
</style>
</head>
<body>
<h2>用户登录</h2>
<hr>
<form action="" method="post">
{% csrf_token %}
<p>用户名: <input type="text" name="username"></p>
<p>密 码: <input type="password" name="password"></p>
{#button标签里有a标签#}
<p><button>登录</button> <button><a href="{% url 'register' %}">注册</a></button></p>
</form>
</body>
</html>
登录视图
代码:
def login(request):
if request.method == 'GET':
return render(request,'login.html')
elif request.method == 'POST':
username=request.POST.get('username')
password=request.POST.get('password')
users=User.objects.filter(username=username,password=password) #登录验证
if users.exists():
user=users.first()
request.session['userid']=user.id #设置session
request.session.set_expiry(7*24*3600)
return redirect('index') #跳转到首页
else:
return HttpResponse('用户名或密码不正确,请重新登录!')
登录路由
直接访问域名就会跳转到登录页面
3、创建首页模板、视图、路由
首页模板
代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>炎黄首页</title>
<style type="text/css">
a {
text-decoration: none;
}
</style>
</head>
<body>
<a name="top"></a>
<h2>查看设备及版本信息</h2>
<hr>
<pre>
1、通过display version命令的回显,查看交换机的版本信息。
Huawei Versatile Routing Platform Software
VRP (R) software, Version 5.160 (S7700 V200R021C00)
Copyright (C) 2000-2020 HUAWEI TECH CO., LTD
Quidway S7703 Terabit Routing Switch uptime is 0 week, 0 day, 1 hour, 3 minutes
BKP 0 version information:
1. PCB Version : LE02BAKB VER.A
2. Supporting PoE : No
3. Board Type : ES0B017712P0
4. MPU Slot Quantity : 2
5. LPU Slot Quantity : 3
2、通过display device命令的回显,查看交换机的型号、是否是集群/堆叠系统、交换机上使用的业务板(仅框式交换机有业务板)有哪些类型等。
</pre>
<hr>
<p>当前登录用户:{{ user.username }}</p>
<p>客户端IP地址:{{ client_ip }}</p>
<p><button><a href="{% url 'logout' %}">注销</a></button> <button><a href="#top">返回顶部</a></button></p>
</body>
</html>
注销功能还没实现
首页视图
代码:
def index(request):
userid=request.session.get('userid',0) #验证用户登录再返回页面,获取CKKOIES的userid,默认值为0
client_ip=request.META.get('REMOTE_ADDR')
users=User.objects.filter(id=userid)
if users.exists():
user=users.first()
return render(request,'index.html',{'user':user,'client_ip':client_ip})
else:
return redirect('login')
效果是不登录无法访问首页
首页路由
4、实现注销功能
就是删除session值
不需要注销模板
注销视图
代码:
def logout(request):
session_key=request.session.session_key
request.session.delete(session_key)
request.session.flush() #要加这个功能刷新session
return redirect('login')
存在的问题,按浏览器的后退键又回到登录的界面,只是不是真正的登录,刷新一下就看不到了
注销路由
五、浏览器注册、登录、注销测试
访问:http://127.0.0.1:8000是登录界面,点击注册
会跳转到登录界面,输入用户名和密码登录