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对比C语言的编程思想差异
Aug 30 Python
Python实现输出程序执行进度百分比的方法
Sep 16 Python
Python使用当前时间、随机数产生一个唯一数字的方法
Sep 18 Python
恢复百度云盘本地误删的文件脚本(简单方法)
Oct 21 Python
Python迭代器与生成器用法实例分析
Jul 09 Python
Python3.4学习笔记之类型判断,异常处理,终止程序操作小结
Mar 01 Python
Django中使用 Closure Table 储存无限分级数据
Jun 06 Python
python 实现在shell窗口中编写print不向屏幕输出
Feb 19 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
Mar 10 Python
Python flask路由间传递变量实例详解
Jun 03 Python
python如何查看安装了的模块
Jun 23 Python
详解Python函数print用法
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
一个更简单的无限级分类菜单代码
2007/01/16 PHP
PHP 函数学习简单小结
2010/07/08 PHP
php5.3中连接sqlserver2000的两种方法(com与ODBC)
2012/12/29 PHP
php单文件版在线代码编辑器
2015/03/12 PHP
php源码之将图片转化为data/base64数据流实例详解
2016/11/27 PHP
Wordpress ThickBox 添加“查看原图”效果代码
2010/12/11 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
js获取微信版本号的方法
2015/05/12 Javascript
JavaScript使用FileSystemObject对象写入文本文件内容的方法
2015/08/05 Javascript
jQuery中常用的遍历函数用法实例总结
2015/09/01 Javascript
jQuery实现Meizu魅族官方网站的导航菜单效果
2015/09/14 Javascript
jquery获取img的src值的简单实例
2016/05/17 Javascript
JS实现复制功能
2017/03/01 Javascript
ES6学习笔记之Set和Map数据结构详解
2017/04/07 Javascript
JavaScript箭头(arrow)函数详解
2017/06/04 Javascript
收集前端面试题之url、href、src
2018/03/22 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
Python入门篇之对象类型
2014/10/17 Python
python根据出生日期返回年龄的方法
2015/03/26 Python
在python中pandas读文件,有中文字符的方法
2018/12/12 Python
一篇文章弄懂Python中的可迭代对象、迭代器和生成器
2019/08/12 Python
python requests模拟登陆github的实现方法
2019/12/26 Python
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
HTML5拖拽API经典实例详解
2018/04/20 HTML / CSS
奥地利汽车配件店:Pkwteile.at
2017/03/10 全球购物
巴西箱包、背包、钱包和旅行配件购物网站:Inovathi
2019/12/14 全球购物
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
动物科学专业毕业生的自我评价
2013/11/29 职场文书
小学校园活动策划
2014/01/30 职场文书
工厂会计员职责
2014/02/06 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
中学生逃课检讨书
2015/02/17 职场文书
代理词怎么写
2015/05/25 职场文书
婚礼嘉宾致辞
2015/07/28 职场文书
详解Vue的sync修饰符
2021/05/15 Vue.js
零基础学java之带参数以及返回值的方法
2022/04/10 Java/Android