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 抓取动态网页内容方案详解
Dec 25 Python
利用Python中的pandas库对cdn日志进行分析详解
Mar 07 Python
python2.7读取文件夹下所有文件名称及内容的方法
Feb 24 Python
Python实现的当前时间多加一天、一小时、一分钟操作示例
May 21 Python
python简易远程控制单线程版
Jun 20 Python
Django之模板层的实现代码
Sep 09 Python
Python + Requests + Unittest接口自动化测试实例分析
Dec 12 Python
python logging 日志的级别调整方式
Feb 21 Python
Python yield的用法实例分析
Mar 06 Python
使用pycharm和pylint检查python代码规范操作
Jun 09 Python
Django URL参数Template反向解析
Nov 24 Python
Python机器学习之KNN近邻算法
May 14 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
提示Trying to clone an uncloneable object of class Imagic的解决
2011/10/27 PHP
PHP递归返回值时出现的问题解决办法
2013/02/19 PHP
PHP连接MySQL数据的操作要点
2015/03/20 PHP
PHP 应用容器化以及部署方法
2018/02/12 PHP
兼容多浏览器的iframe自适应高度(ie8 、谷歌浏览器4.0和 firefox3.5.3)
2009/11/04 Javascript
javascript 混合的构造函数和原型方式,动态原型方式
2009/12/07 Javascript
使用UglifyJS合并/压缩JavaScript的方法
2012/03/07 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
jquery struts 验证唯一标识(公用方法)
2013/03/27 Javascript
javascript上传图片前预览图片兼容大多数浏览器
2013/10/25 Javascript
javascript修改表格背景色实例代码分享
2013/12/10 Javascript
使用JS轻松实现ionic调用键盘搜索功能(超实用)
2016/09/06 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
2016/12/08 Javascript
微信小程序实战之仿android fragment可滑动底部导航栏(4)
2020/04/16 Javascript
easyUI下拉列表点击事件使用方法
2017/05/18 Javascript
安装vue-cli报错 -4058 的解决方法
2017/10/19 Javascript
vue cli2.0单页面title修改方法
2018/06/07 Javascript
node.js基于socket.io快速实现一个实时通讯应用
2019/04/23 Javascript
vue组件中传值EventBus的使用及注意事项说明
2020/11/16 Javascript
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
Python中的lstrip()方法使用简介
2015/05/19 Python
flask + pymysql操作Mysql数据库的实例
2017/11/13 Python
对Python 3.5拼接列表的新语法详解
2018/11/08 Python
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
阿提哈德航空官方网站:Etihad Airways
2017/01/06 全球购物
孤独星球出版物:Lonely Planet Publications
2018/03/17 全球购物
日语专业毕业生求职信
2013/12/04 职场文书
《风筝》教学反思
2014/04/10 职场文书
药品营销策划方案
2014/06/15 职场文书
销售人员求职信
2014/07/22 职场文书
学习优秀党务工作者先进事迹材料思想报告
2014/09/17 职场文书
单方离婚协议书范本(2014版)
2014/09/30 职场文书
客户经理岗位职责大全
2015/04/09 职场文书
义卖募捐活动总结
2015/05/09 职场文书
Win11开始菜单添加休眠选项
2022/04/19 数码科技
Linux在两个服务器直接传文件的操作方法
2022/08/05 Servers