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中使用HTML模版的教程
Apr 29 Python
python实现基本进制转换的方法
Jul 11 Python
python实现简易云音乐播放器
Jan 04 Python
解决python matplotlib imshow无法显示的问题
May 24 Python
和孩子一起学习python之变量命名规则
May 27 Python
django ajax json的实例代码
May 29 Python
使用Python如何测试InnoDB与MyISAM的读写性能
Sep 18 Python
Python中反射和描述器总结
Sep 23 Python
Python中的self用法详解
Aug 06 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
Jun 23 Python
python subprocess pipe 实时输出日志的操作
Dec 05 Python
Python进阶学习之带你探寻Python类的鼻祖-元类
May 08 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 str_pad 函数使用详解
2009/01/13 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
2014/01/07 PHP
php命名空间学习详解
2014/02/27 PHP
php采用file_get_contents代替使用curl实例
2014/11/07 PHP
php发送http请求的常用方法分析
2016/11/08 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
详解php实现页面静态化原理
2017/06/21 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
PHP开发之用微信远程遥控服务器
2018/01/25 PHP
PHP封装的非对称加密RSA算法示例
2018/05/28 PHP
php使用curl模拟浏览器表单上传文件或者图片的方法
2018/11/10 PHP
CentOS7系统搭建LAMP及更新PHP版本操作详解
2020/03/26 PHP
jquery简单瀑布流实现原理及ie8下测试代码
2013/01/23 Javascript
火狐textarea输入法的bug的触发及解决
2013/07/24 Javascript
使用jQuery解决IE与FireFox下createElement方法的差异
2013/11/14 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
jquery无法设置checkbox选中即没有变成选中状态
2014/03/27 Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
2014/09/26 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
详解Javascript几种跨域方式总结
2017/02/27 Javascript
Vue中&quot;This dependency was not found&quot;问题的解决方法
2018/06/19 Javascript
jQuery实现的老虎机跑动效果示例
2018/12/29 jQuery
基于Vant UI框架实现时间段选择器
2020/12/24 Javascript
Python编程求解二叉树中和为某一值的路径代码示例
2018/01/04 Python
python os.fork() 循环输出方法
2019/08/08 Python
Pytorch之parameters的使用
2019/12/31 Python
利用python实现.dcm格式图像转为.jpg格式
2020/01/13 Python
python topk()函数求最大和最小值实例
2020/04/02 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
html5的input的required使用中遇到的问题及解决方法
2018/04/24 HTML / CSS
马来西亚和新加坡巴士票在线预订:CatchThatBus
2018/11/17 全球购物
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
Final类有什么特点
2012/04/25 面试题
十一国庆节“向国旗敬礼”主题班会活动方案
2014/09/27 职场文书
总结Python使用过程中的bug
2021/06/18 Python