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制作在地图上模拟瘟疫扩散的Gif图
Mar 31 Python
在Python中使用HTML模版的教程
Apr 29 Python
Python读取网页内容的方法
Jul 30 Python
Python简单读取json文件功能示例
Nov 30 Python
python+matplotlib绘制3D条形图实例代码
Jan 17 Python
Python爬取成语接龙类网站
Oct 19 Python
详解Python 正则表达式模块
Nov 05 Python
Python中super函数用法实例分析
Mar 18 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
Jul 01 Python
Python re 模块findall() 函数返回值展现方式解析
Aug 09 Python
详解用python计算阶乘的几种方法
Aug 14 Python
Python大数据之使用lxml库解析html网页文件示例
Nov 16 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
DedeCMS 核心类TypeLink.class.php摘要笔记
2010/04/07 PHP
php设计模式之组合模式实例详解【星际争霸游戏案例】
2020/03/27 PHP
php实现将数组或对象写入到文件的方法小结【三种方法】
2020/04/22 PHP
javascript实现类似超链接的效果
2014/12/26 Javascript
通过伪协议解决父页面与iframe页面通信的问题
2015/04/05 Javascript
jQuery实现伸展与合拢panel的方法
2015/04/30 Javascript
用window.onerror捕获并上报Js错误的方法
2016/01/27 Javascript
JS简单实现DIV相对于浏览器固定位置不变的方法
2016/06/17 Javascript
chrome下判断点击input上标签还是其余标签的实现方法
2016/09/18 Javascript
bootstrap警告框使用方法解析
2017/01/13 Javascript
微信小程序 开发之全局配置
2017/05/05 Javascript
Vue实现动态显示textarea剩余字数
2017/05/22 Javascript
详解React native全局变量的使用(跨组件的通信)
2017/09/07 Javascript
Nuxt使用Vuex的方法示例
2019/09/06 Javascript
js实现点击上传图片并设为模糊背景
2020/08/02 Javascript
JavaScript实现五子棋小游戏
2020/10/26 Javascript
利用python模拟sql语句对员工表格进行增删改查
2017/07/05 Python
基于Python中单例模式的几种实现方式及优化详解
2018/01/09 Python
python实现求最长回文子串长度
2018/01/22 Python
Python实现的FTP通信客户端与服务器端功能示例
2018/03/28 Python
Python配置虚拟环境图文步骤
2019/05/20 Python
Python 抓取微信公众号账号信息的方法
2019/06/14 Python
Python传递参数的多种方式(小结)
2019/09/18 Python
python利用百度云接口实现车牌识别的示例
2020/02/21 Python
Python matplotlib修改默认字体的操作
2020/03/05 Python
Python 实现敏感目录扫描的示例代码
2020/05/21 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
中间件分为哪几类
2016/09/18 面试题
一份关于丢失公司财物的检讨书
2014/09/19 职场文书
认真学习保证书
2015/02/26 职场文书
珍爱生命主题班会
2015/08/13 职场文书
大学军训口号大全
2015/12/24 职场文书
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS
MySQL 主从复制数据不一致的解决方法
2022/03/18 MySQL
《异世界四重奏》剧场版6月10日上映 PV视觉图原创角色发表
2022/03/20 日漫
详解Go语言中配置文件使用与日志配置
2022/06/01 Golang