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对两个有序列表进行合并和排序的例子
Jun 13 Python
python中字典(Dictionary)用法实例详解
May 30 Python
Python3 利用requests 库进行post携带账号密码请求数据的方法
Oct 26 Python
浅谈python 读excel数值为浮点型的问题
Dec 25 Python
使用matplotlib中scatter方法画散点图
Mar 19 Python
Python3安装psycopy2以及遇到问题解决方法
Jul 03 Python
使用PyCharm进行远程开发和调试的实现
Nov 04 Python
python manage.py runserver流程解析
Nov 08 Python
python next()和iter()函数原理解析
Feb 07 Python
Spy++的使用方法及下载教程
Jan 29 Python
Python 多线程之threading 模块的使用
Apr 14 Python
python中如何对多变量连续赋值
Jun 03 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
全国FM电台频率大全 - 26 西藏自治区
2020/03/11 无线电
分页显示Oracle数据库记录的类之二
2006/10/09 PHP
用PHP实现Ftp用户的在线管理的代码
2007/03/06 PHP
Zend Studio去除编辑器的语法警告设置方法
2012/10/24 PHP
浅析php数据类型转换
2014/01/09 PHP
如何使用纯PHP实现定时器任务(Timer)
2015/07/31 PHP
ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败)
2016/04/15 PHP
js计数器代码
2006/11/04 Javascript
YUI 读码日记之 YAHOO.lang.is*
2008/03/22 Javascript
jQuery validate 中文API 附validate.js中文api手册
2010/07/31 Javascript
一个网页标题title的闪动提示效果实现思路
2014/03/22 Javascript
js实现在同一窗口浏览图片
2014/09/17 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
详解maxlength属性在textarea里奇怪的表现
2015/12/27 Javascript
使用vue.js实现checkbox的全选和多个的删除功能
2017/02/17 Javascript
vue-cli中的webpack配置详解
2017/09/25 Javascript
使用javaScript实现鼠标拖拽事件
2020/04/03 Javascript
jQuery 防止相同的事件快速重复触发方法
2018/02/08 jQuery
使用jQuery动态设置单选框的选中效果
2018/12/06 jQuery
vue滚动插件better-scroll使用详解
2019/10/18 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
2019/11/06 Javascript
[03:35]2018年度DOTA2最佳辅助位选手5号位-完美盛典
2018/12/17 DOTA
在Python操作时间和日期之asctime()方法的使用
2015/05/22 Python
pytorch中tensor的合并与截取方法
2018/07/26 Python
python 文本单词提取和词频统计的实例
2018/12/22 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
python os.fork() 循环输出方法
2019/08/08 Python
Django实现文件上传下载功能
2019/10/06 Python
PyTorch里面的torch.nn.Parameter()详解
2020/01/03 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
Keras 加载已经训练好的模型进行预测操作
2020/06/17 Python
python定时截屏实现
2020/11/02 Python
荷兰网上鞋店:Ziengs.nl
2017/01/02 全球购物
平面设计专业大学生职业规划书
2014/03/12 职场文书
党支部审查意见
2015/06/02 职场文书
团委副书记工作总结
2015/08/14 职场文书