Django实现auth模块下的登录注册与注销功能


Posted in Python onOctober 10, 2019

看了好多登录注册和注销的教程,很乱,很迷,然后总结了一下,简单的做了一个登录,注册和注销的页面。

1,首先,使用pycharm创建一个项目

单击File —> 选中Django —> 在右侧Location选中所需的路径,或直接在框里命名

Django实现auth模块下的登录注册与注销功能

 2,现在,你有了一个Django项目

你需要单击左下方的Terminal

Django实现auth模块下的登录注册与注销功能

创建一个app,命令:python  manage.py startapp Myapp(命名不做要求)

创建一个存放静态文件的文件夹:static(默认为该命名)

项目如下:

Django实现auth模块下的登录注册与注销功能

3,在Waste下:

settings.py:

INSTALLED_APPS = [
  'django.contrib.admin',
  'django.contrib.auth',
  'django.contrib.contenttypes',
  'django.contrib.sessions',
  'django.contrib.messages',
  'django.contrib.staticfiles',
  # 激活app
  'Myapp'
]
 
# 更改数据库连接
DATABASES = {
  'default': {
    'ENGINE': 'django.db.backends.mysql',
    'HOST' : 'localhost',
    'PORT' : 3306,
    'NAME' : 'mysql',
    'USER': 'root',
    'PASSWORD' : '123456'
  }
}
# 汉语与时区
 
LANGUAGE_CODE = 'zh-hans'
 
TIME_ZONE = 'Asia/Shanghai'
 
# 静态文件夹路径
STATIC_URL = '/static/'
 
STATICFILES_DIRS = [
  os.path.join(BASE_DIR,'static'),
]

   在urls.py下:

from django.contrib import admin
from django.urls import path,include
 
urlpatterns = [
  path('admin/', admin.site.urls),
  #更改url匹配,定向到myApp的urls中,当主机地址后面参数时,到myApp中找链接
  path('',include('Myapp.urls'))
]

 关闭这俩文件,因为我们基本用不到了。

4,在Myapp下:

新建urls.py,项目如下:

Django实现auth模块下的登录注册与注销功能

__init__.py:设置数据库连接

import pymysql
pymysql.install_as_MySQLdb()

urls.py:

from django.urls import path
from . import views
 
urlpatterns = [
  #主页,用来显示类别等其他数据
  path('',views.index),
  # 登录
  path('tologin/',views.tologin),
  # 注册
  path('register/',views.register),
  # 注销
  path('lagout/',views.lagout),
]

views.py:

from django.shortcuts import render, redirect
from django.http import HttpResponseRedirect
from django.contrib.auth.models import User
from django.contrib.auth import authenticate,login,logout
from django.contrib.auth.models import AnonymousUser
 
# Create your views here.
# 主页
def index(request,):
  username = request.user
  return render(request,'Myapp/index.html',locals())
 
# 登录
def tologin(request):
  if request.method == 'POST' and request.POST:
    data = request.POST
    username = data.get('username')
    password = data.get('password')
    n = authenticate(username=username,password=password)
    if n:
      # 登陆成功即可获取当前登录用户,返回主页
      login(request,user=n)
      return redirect('/')
  # 失败重定向到登录页
  return render(request, 'myApp/login.html')
 
# 注册
def register(request):
  if request.method == 'POST' and request.POST:
    data = request.POST
    username = data.get("username")
    password = data.get("password")
    # 校验注册,名字不可重复
    u = User.objects.filter(username=username).first()
    if u:
      info = '该用户名已被注册'
      return render(request,'Myapp/ERROR.html',{'info':info})
    else:
      # 注册成功,创建用户
      User.objects.create_user(
        username=username,
        password=password
      )
      # 重定向到登录页面
      return HttpResponseRedirect('/tologin/')
  # 注册失败,重新注册
  return render(request,'Myapp/register.html')
 
def lagout(request):
  logout(request)
  return redirect('/')

因为用的是auth组件,所以这个模型可以不写

5,回到Terminal

执行生成迁移文件:python manager.py makemigrations

生成迁移:python manager.py migrate

6,简陋的html

ERROR.html:用来提示错误,任何页面的错误,向该页面传入错误信息info即可

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>ERROR</title>
</head>
<body>
{{ info }}
</body>
</html>

index.html:主页,欢迎用户,无用户显示为游客,为什么是游客,不是AnonymousUser,后面讲

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>主页</title>
</head>
<body>
 
  你好,{{ username }}
  <a href="{{ " rel="external nofollow" rel="external nofollow" rel="external nofollow" lagout/" }}">注销</a>
  <a href="{{ " rel="external nofollow" rel="external nofollow" rel="external nofollow" tologin/" }}">登录</a>
  <a href="{{ " rel="external nofollow" rel="external nofollow" rel="external nofollow" register/" }}">注册</a>
 
</body>
</html>

login.html :登录,简陋,emmm

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>登录</title>
</head>
<body>
<form method="post">
    {% csrf_token %}
    <p>
      用户名:<input type="text" name="username" >
    </p>
    <p>
      密  码:<input type="password" name="password" >
    </p>
    <p>
      <input type="submit" value="登录">
       
      <input type="reset" value="取消">
    </p>
  </form>
</body>
</html>

register:注册:简陋,too

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>注册</title>
</head>
<body>
<form method="post">
    {% csrf_token %}
    <p>
      用户名:<input type="text" name="username" >
    </p>
    <p>
      密  码:<input type="password" name="password" >
    </p>
    <p>
      <input type="submit" value="注册">
       
      <input type="reset" value="取消">
    </p>
  </form>
</body>
</html>

然后,一般,我们用auth组件,如果没有登录,它会这样显示:

Django实现auth模块下的登录注册与注销功能

但是,它很突兀,很难受,为什么是英语?什么意思?对不对,就想改。那就改呗

在我的views.py里的最后一个import是无用引用,ctrl加鼠标右键点击AnonymousUser,查看AnonymousUser源码:

Django实现auth模块下的登录注册与注销功能

改成:

Django实现auth模块下的登录注册与注销功能

即可:

Django实现auth模块下的登录注册与注销功能

7,测试:

运行命令:python manager.py runserver,不是点击三角形哦。

注册成功跳转登录

Django实现auth模块下的登录注册与注销功能Django实现auth模块下的登录注册与注销功能

跳转登录,登录后转首页,且欢迎当前用户

Django实现auth模块下的登录注册与注销功能Django实现auth模块下的登录注册与注销功能

注销,成功注销后回首页,且欢迎游客

Django实现auth模块下的登录注册与注销功能

最后,注册已有用户名报错

Django实现auth模块下的登录注册与注销功能Django实现auth模块下的登录注册与注销功能

总结

以上所述是小编给大家介绍的Django实现auth模块下的登录注册与注销功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python通过PIL获取图片主要颜色并和颜色库进行对比的方法
Mar 19 Python
python实现排序算法解析
Sep 08 Python
使用pip发布Python程序的方法步骤
Oct 11 Python
python 重命名轴索引的方法
Nov 10 Python
Python实现针对json中某个关键字段进行排序操作示例
Dec 25 Python
pyqt5实现登录界面的模板
May 30 Python
pyqt 实现QlineEdit 输入密码显示成圆点的方法
Jun 24 Python
python实现每天自动签到领积分的示例代码
Aug 18 Python
彻底搞懂python 迭代器和生成器
Sep 07 Python
浅谈Selenium+Webdriver 常用的元素定位方式
Jan 13 Python
Python+Appium新手教程
Apr 17 Python
python b站视频下载的五种版本
May 27 Python
导入tensorflow时报错:cannot import name 'abs'的解决
Oct 10 #Python
关于pycharm中pip版本10.0无法使用的解决办法
Oct 10 #Python
超实用的 30 段 Python 案例
Oct 10 #Python
使用浏览器访问python写的服务器程序
Oct 10 #Python
详解Python time库的使用
Oct 10 #Python
python自动化测试无法启动谷歌浏览器问题
Oct 10 #Python
python批量将excel内容进行翻译写入功能
Oct 10 #Python
You might like
php file_get_contents抓取Gzip网页乱码的三种解决方法
2013/11/12 PHP
使用CodeIgniter的类库做图片上传
2014/06/12 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
JavaScript 学习 - 提高篇
2007/02/02 Javascript
js不能跳转到上一页面的问题解决方法
2013/03/01 Javascript
angularJS中router的使用指南
2015/02/09 Javascript
如何编写高质量JS代码(续)
2015/02/25 Javascript
jquery点击缩略图切换视频播放特效代码分享
2015/09/15 Javascript
深入理解js中this的用法
2016/05/28 Javascript
Vue.js每天必学之表单控件绑定
2016/09/05 Javascript
Bootstrap select实现下拉框多选效果
2016/12/23 Javascript
纯原生js实现table表格的增删
2017/01/05 Javascript
Bootstrap BootstrapDialog使用详解
2017/02/17 Javascript
lhgcalendar时间插件限制只能选择三个月的实现方法
2017/07/03 Javascript
Vue瀑布流插件的使用示例
2018/09/19 Javascript
详解vuex状态管理模式
2018/11/01 Javascript
node之本地服务器图片上传的方法示例
2019/03/26 Javascript
[02:38]DOTA2超级联赛专访Loda 认为IG世界最强
2013/05/27 DOTA
[01:00:25]NB vs Secret 2018国际邀请赛小组赛BO1 B组加赛 8.19
2018/08/21 DOTA
[58:54]EG vs RNG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python求斐波那契数列示例分享
2014/02/14 Python
python实现挑选出来100以内的质数
2015/03/24 Python
python实现复制整个目录的方法
2015/05/12 Python
Python简单读取json文件功能示例
2017/11/30 Python
利用python为运维人员写一个监控脚本
2018/03/25 Python
Python continue继续循环用法总结
2018/06/10 Python
python实现Flappy Bird源码
2018/12/24 Python
Python产生一个数值范围内的不重复的随机数的实现方法
2019/08/21 Python
加拿大服装和鞋类零售商:Mark’s
2021/01/04 全球购物
临床医学大学生求职信
2013/09/28 职场文书
毕业生求职自荐书范文
2014/03/27 职场文书
村干部培训方案
2014/05/02 职场文书
英语课前三分钟演讲稿(6篇)
2014/09/13 职场文书
写作指导:怎么书写竞聘演讲稿?
2019/07/04 职场文书
解决Windows Server2012 R2 无法安装 .NET Framework 3.5
2022/04/29 Servers