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读写Redis数据库操作示例
Mar 18 Python
Python实现获取操作系统版本信息方法
Apr 08 Python
基于Python如何使用AIML搭建聊天机器人
Jan 27 Python
Python出现segfault错误解决方法
Apr 16 Python
Python2.7读取PDF文件的方法示例
Jul 13 Python
对python-3-print重定向输出的几种方法总结
May 11 Python
python爬取网页内容转换为PDF文件
Jul 28 Python
解决python 文本过滤和清理问题
Aug 28 Python
使用PyCharm进行远程开发和调试的实现
Nov 04 Python
python matplotlib实现将图例放在图外
Apr 17 Python
Python flask框架如何显示图像到web页面
Jun 03 Python
selenium自动化测试入门实战
Dec 21 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
php 的加密函数 md5,crypt,base64_encode 等使用介绍
2012/04/09 PHP
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
用JavaScript将从数据库中读取出来的日期型格式化为想要的类型。
2009/08/15 Javascript
文本框中,回车键触发事件的js代码[多浏览器兼容]
2010/06/07 Javascript
javascript禁制后退键(Backspace)实例代码
2013/11/15 Javascript
浅谈javascript中onbeforeunload与onunload事件
2015/12/10 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
js实现页面刷新滚动条位置不变
2016/11/27 Javascript
vue.js整合mint-ui里的轮播图实例代码
2017/12/27 Javascript
karma+webpack搭建vue单元测试环境的方法示例
2018/05/24 Javascript
详解如何在微信小程序开发中正确的使用vant ui组件
2018/09/13 Javascript
vue3.0 CLI - 3.2 路由的初级使用教程
2018/09/20 Javascript
vue如何自动化打包测试环境和正式环境的dist/test文件
2019/06/06 Javascript
浅谈webpack 四个核心概念之Entry
2019/06/12 Javascript
python更新列表的方法
2015/07/28 Python
TensorFlow模型保存/载入的两种方法
2018/03/08 Python
python构建深度神经网络(续)
2018/03/10 Python
Python面向对象类继承和组合实例分析
2018/05/28 Python
Python基于Tkinter模块实现的弹球小游戏
2018/12/27 Python
Python中拆分字符串的操作方法
2019/07/23 Python
django-初始配置(纯手写)详解
2019/07/30 Python
python实现最大优先队列
2019/08/29 Python
pytorch三层全连接层实现手写字母识别方式
2020/01/14 Python
浅析python连接数据库的重要事项
2021/02/22 Python
IE9下html5初试小刀
2010/09/21 HTML / CSS
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
HTML5新特性之type=file文件上传功能
2018/02/02 HTML / CSS
美国汽车性能部件和赛车零件网站:Vivid Racing
2018/03/27 全球购物
机械工程师求职自我评价
2013/09/23 职场文书
公司综合部的成员自我评价分享
2013/11/05 职场文书
2014春晚主持词
2014/03/25 职场文书
社会主义核心价值观主题教育活动总结
2015/05/07 职场文书
《金色的草地》教学反思
2016/02/17 职场文书
在前女友婚礼上,用Python破解了现场的WIFI还把名称改成了
2021/05/28 Python
MySQL创建管理LIST分区
2022/04/13 MySQL