django 框架实现的用户注册、登录、退出功能示例


Posted in Python onNovember 28, 2019

本文实例讲述了django 框架实现的用户注册、登录、退出功能。分享给大家供大家参考,具体如下:

1 用户注册:

from django.contrib import auth
from django.contrib.auth.models import User
from django.views.decorators.csrf import csrf_exempt
from django.http import HttpResponseRedirect
# 用户注册
@csrf_exempt
def register(request):
  errors = []
  account = None
  password = None
  password2 = None
  email = None
  CompareFlag = False
  if request.method == 'POST':
    if not request.POST.get('account'):
      errors.append('用户名不能为空')
    else:
      account = request.POST.get('account')
    if not request.POST.get('password'):
      errors.append('密码不能为空')
    else:
      password = request.POST.get('password')
    if not request.POST.get('password2'):
      errors.append('确认密码不能为空')
    else:
      password2 = request.POST.get('password2')
    if not request.POST.get('email'):
      errors.append('邮箱不能为空')
    else:
      email = request.POST.get('email')
    if password is not None:
      if password == password2:
        CompareFlag = True
      else:
        errors.append('两次输入密码不一致')
    if account is not None and password is not None and password2 is not None and email is not None and CompareFlag :
      user = User.objects.create_user(account,email,password)
      user.save()
      userlogin = auth.authenticate(username = account,password = password)
      auth.login(request,userlogin)
      return HttpResponseRedirect('/blog')
  return render(request,'blog/register.html', {'errors': errors})

2 用户登录:

@csrf_exempt
def my_login(request):
  errors =[]
  account = None
  password = None
  if request.method == "POST":
    if not request.POST.get('account'):
      errors.append('用户名不能为空')
    else:
      account = request.POST.get('account')
    if not request.POST.get('password'):
      errors = request.POST.get('密码不能为空')
    else:
      password = request.POST.get('password')
    if account is not None and password is not None:
      user = auth.authenticate(username=account,password=password)
      if user is not None:
        if user.is_active:
          auth.login(request,user)
          return HttpResponseRedirect('/blog')
        else:
          errors.append('用户名错误')
      else:
        errors.append('用户名或密码错误')
  return render(request,'blog/login.html', {'errors': errors})

3 用户退出:

def my_logout(request):
  auth.logout(request)
  return HttpResponseRedirect('/blog')

URL:

urlpatterns = [
  url(r'^$', views.index, name='index'),
  url(r'^p/(?P<article_id>[0-9]+)/$', views.detail,name='detail'),
  url(r'^register/$',views.register, name='register'),
  url(r'^login/$',views.my_login, name='my_login'),
  url(r'^logout/$',views.my_logout, name='my_logout'),
]

注册 HTML:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
{% if errors %}
    <li>
      {% for error in errors %}
       <p style="color: red;">
        {{error}}
       </p>
       {% endfor %}
    </li>
  {% endif %}
<table>
  <form action="" method="post">{% csrf_token %}
    <tr>
      <td>
        <label >用户名:</label>
      </td>
      <td>
        <input type = 'text' placeholder="输入用户名" name = 'account'>
      </td>
    </tr>
    <tr>
      <td>
        <label >密码:</label>
      </td>
      <td>
       <input type = 'password' placeholder="输入密码" name = 'password'>
      </td>
    </tr>
     <tr>
       <td>
        <label >确认密码:</label>
       </td>
       <td>
         <input type = 'password' placeholder="再次输入密码" name ='password2'>
       </td>
     </tr>
     <tr>
       <td>
         <label>邮箱:</label>
       </td>
       <td>
         <input type="email" placeholder="输入邮箱" name = 'email'>
       </td>
     </tr>
     <tr>
       <td>
          <input type = 'submit' placeholder="Login" value="登录">
       </td>
     </tr>
  </form>
</table>
</body>
</html>

登录HTML:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>登录</title>
</head>
<body>
{% if errors %}
    <li>
      {% for error in errors %}
       <p style="color: red;">
        {{error}}
       </p>
       {% endfor %}
    </li>
  {% endif %}
<table>
  <form action="" method="post">{% csrf_token %}
    <tr>
      <td>
        <label >用户名:</label>
      </td>
      <td>
        <input type = 'text' placeholder="输入用户名" name = 'account'>
      </td>
    </tr>
    <tr>
      <td>
        <label >密码:</label>
      </td>
      <td>
       <input type = 'password' placeholder="输入密码" name = 'password'>
      </td>
    </tr>
     <tr>
       <td>
          <input type = 'submit' placeholder="Login" value="登录">
       </td>
     </tr>
  </form>
</table>
</body>
</html>
</body>
</html>

希望本文所述对大家基于Django框架的Python程序设计有所帮助。

Python 相关文章推荐
Python自定义函数的创建、调用和函数的参数详解
Mar 11 Python
Python封装shell命令实例分析
May 05 Python
python抽象基类用法实例分析
Jun 04 Python
Python多线程下载文件的方法
Jul 10 Python
python中快速进行多个字符替换的方法小结
Dec 15 Python
PyQt5利用QPainter绘制各种图形的实例
Oct 19 Python
Pandas分组与排序的实现
Jul 23 Python
ORM Django 终端打印 SQL 语句实现解析
Aug 09 Python
python绘制雪景图
Dec 16 Python
Pytorch 多块GPU的使用详解
Dec 31 Python
最新2019Pycharm安装教程 亲测
Feb 28 Python
python交互模式基础知识点学习
Jun 18 Python
python 变量初始化空列表的例子
Nov 28 #Python
在Python中预先初始化列表内容和长度的实现
Nov 28 #Python
python使用 cx_Oracle 模块进行查询操作示例
Nov 28 #Python
在python中创建指定大小的多维数组方式
Nov 28 #Python
python3.x 生成3维随机数组实例
Nov 28 #Python
python返回数组的索引实例
Nov 28 #Python
numpy中三维数组中加入元素后的位置详解
Nov 28 #Python
You might like
Zend公司全球首推PHP认证
2006/10/09 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
2016/04/07 PHP
PHP正则+Snoopy抓取框架实现的抓取淘宝店信誉功能实例
2017/05/17 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
js继承 Base类的源码解析
2008/12/30 Javascript
Checbox的操作含已选、未选及判断代码
2013/11/07 Javascript
jQuery实现的背景动态变化导航菜单效果
2015/08/24 Javascript
asp知识整理笔记3(问答模式)
2015/09/27 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
JavaScript纯色二维码变成彩色二维码
2020/07/23 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
2017/07/04 jQuery
微信小程序倒计时功能实现代码
2017/11/09 Javascript
jquery实现回车键触发事件(实例讲解)
2017/11/21 jQuery
详解使用 Node.js 开发简单的脚手架工具
2018/06/08 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
9个JavaScript日常开发小技巧
2020/10/06 Javascript
vue3.0搭配.net core实现文件上传组件
2020/10/29 Javascript
详解Python中的type和object
2018/08/15 Python
解决pycharm运行出错,代码正确结果不显示的问题
2018/11/30 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
Python reduce函数作用及实例解析
2020/05/08 Python
python 实现超级玛丽游戏
2020/11/25 Python
python数据抓取3种方法总结
2021/02/07 Python
英国最大的LED专业零售商:Led Hut
2018/03/16 全球购物
浅谈react路由传参的几种方式
2021/03/23 Javascript
生产部主管岗位职责
2014/01/06 职场文书
干部下基层实施方案
2014/03/14 职场文书
中学生评语大全
2014/04/18 职场文书
计算机网络及管理学专业求职信
2014/06/05 职场文书
违反工作规定检讨书范文
2014/12/14 职场文书
公司禁烟通知
2015/04/23 职场文书
2016年教师节感恩寄语
2015/12/04 职场文书
Django给表单添加honeypot验证增加安全性
2021/05/06 Python
Mysql中mvcc各场景理解应用
2022/08/05 MySQL