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中在for循环中嵌套使用if和else语句的技巧
Jun 20 Python
Python数据结构与算法之二叉树结构定义与遍历方法详解
Dec 12 Python
人脸识别经典算法一 特征脸方法(Eigenface)
Mar 13 Python
使用anaconda的pip安装第三方python包的操作步骤
Jun 11 Python
python简单实现AES加密和解密
Mar 28 Python
python绘制双Y轴折线图以及单Y轴双变量柱状图的实例
Jul 08 Python
如何基于Python获取图片的物理尺寸
Nov 25 Python
用python拟合等角螺线的实现示例
Dec 27 Python
Windows上安装tensorflow  详细教程(图文详解)
Feb 04 Python
Python将二维列表list的数据输出(TXT,Excel)
Apr 23 Python
python实现简易名片管理系统
Apr 11 Python
Python实现天气查询软件
Jun 07 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通过array_merge()函数合并关联和非关联数组的方法
2015/03/18 PHP
PHP学习记录之数组函数
2018/06/01 PHP
YII框架实现自定义第三方扩展操作示例
2019/04/26 PHP
json简单介绍
2008/06/10 Javascript
jquery select(列表)的操作(取值/赋值)
2009/08/06 Javascript
jQuery 常见学习网站与参考书
2009/11/09 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
javascript正则匹配汉字、数字、字母、下划线
2014/04/10 Javascript
jquery实现的3D旋转木马特效代码分享
2015/08/25 Javascript
前端编码规范(3)JavaScript 开发规范
2017/01/21 Javascript
Angularjs单选改为多选的开发过程及问题解析
2017/02/17 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
微信小程序实现即时通信聊天功能的实例代码
2018/08/17 Javascript
发布一款npm包帮助理解npm的使用
2019/01/03 Javascript
Vue CLI4 Vue.config.js标准配置(最全注释)
2020/06/05 Javascript
python基础教程之lambda表达式使用方法
2014/02/12 Python
举例讲解Python面相对象编程中对象的属性与类的方法
2016/01/19 Python
python实现K最近邻算法
2018/01/29 Python
python抓取文件夹的所有文件
2018/02/27 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
解决Python获取字典dict中不存在的值时出错问题
2018/10/17 Python
Python学习笔记之Break和Continue用法分析
2019/08/14 Python
Python读取图像并显示灰度图的实现
2020/12/01 Python
python 利用jieba.analyse进行 关键词提取
2020/12/17 Python
StubHub哥伦比亚:购买和出售您的门票
2016/10/20 全球购物
英国最大的电子零件及配件零售商:Partmaster
2017/04/24 全球购物
在使用非全零作为空指针内部表达的机器上, NULL是如何定义
2014/11/09 面试题
解释下列WebService名词:WSDL、SOAP、UDDI
2012/06/22 面试题
新员工入职感言
2014/02/01 职场文书
大学社团活动总结
2014/04/26 职场文书
个人四风问题对照检查材料思想汇报
2014/10/06 职场文书
领导干部考核评语
2015/01/04 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书
月考总结与反思
2015/10/22 职场文书
使用php的mail()函数实现发送邮件功能
2021/06/03 PHP
使用numpy实现矩阵的翻转(flip)与旋转
2021/06/03 Python