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 相关文章推荐
ptyhon实现sitemap生成示例
Mar 30 Python
Python中使用PyHook监听鼠标和键盘事件实例
Jul 18 Python
使用pdb模块调试Python程序实例
Jun 02 Python
CentOS中使用virtualenv搭建python3环境
Jun 08 Python
Python中的anydbm模版和shelve模版使用指南
Jul 09 Python
对Python的zip函数妙用,旋转矩阵详解
Dec 13 Python
python mysql断开重连的实现方法
Jul 26 Python
python程序 创建多线程过程详解
Sep 23 Python
命令行运行Python脚本时传入参数的三种方式详解
Oct 11 Python
TensorFlow2.0矩阵与向量的加减乘实例
Feb 07 Python
Python class的继承方法代码实例
Feb 14 Python
Python关于OS文件目录处理的实例分享
May 23 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
CI框架中zip类应用示例
2014/06/17 PHP
详谈PHP编码转换问题
2015/07/28 PHP
php实现json编码的方法
2015/07/30 PHP
php实现点击可刷新验证码
2015/11/07 PHP
yii2.0整合阿里云oss的示例代码
2017/09/19 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
php设计模式之迭代器模式实例分析【星际争霸游戏案例】
2020/04/07 PHP
phpmyadmin在宝塔面板里进不去的解决方案
2020/07/06 PHP
强制设为首页代码
2006/06/19 Javascript
基于jquery自定义图片热区效果
2012/07/21 Javascript
js 中将多个逗号替换为一个逗号的代码
2014/06/07 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
实现无刷新联动例子汇总
2015/05/20 Javascript
JavaScript多线程详解
2015/08/12 Javascript
jquery带动画效果幻灯片特效代码
2015/08/27 Javascript
Node.js中环境变量process.env的一些事详解
2017/10/26 Javascript
node.js读取Excel数据(下载图片)的方法示例
2018/08/02 Javascript
js实现无刷新监听URL的变化示例代码详解
2020/06/03 Javascript
vue实现数字滚动效果
2020/06/29 Javascript
javascript运行机制之执行顺序理解
2020/08/03 Javascript
快速解决vue2+vue-cli3项目ie兼容的问题
2020/11/17 Vue.js
Python绘制3d螺旋曲线图实例代码
2017/12/20 Python
python中break、continue 、exit() 、pass终止循环的区别详解
2019/07/08 Python
django-初始配置(纯手写)详解
2019/07/30 Python
python3光学字符识别模块tesserocr与pytesseract的使用详解
2020/02/26 Python
Python unittest框架操作实例解析
2020/04/13 Python
Python实现打包成库供别的模块调用
2020/07/13 Python
CSS3 实现时间轴动画
2020/11/25 HTML / CSS
英国二手物品交易网站:Preloved
2017/10/06 全球购物
Bench加拿大官方网站:英国城市服装品牌
2017/11/03 全球购物
俄语翻译实习生的自我评价分享
2013/11/06 职场文书
蓝颜请假条
2014/04/11 职场文书
公司新人试用期自我评价
2014/09/17 职场文书
《我是什么》教学反思
2016/02/16 职场文书
Mysql 设置boolean类型的操作
2021/06/04 MySQL
25张裸眼3D图片,带你重温童年的记忆,感受3D的魅力
2022/02/06 杂记