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进阶教程之模块(module)介绍
Aug 30 Python
scrapy爬虫实例分享
Dec 28 Python
使用requests库制作Python爬虫
Mar 25 Python
python 构造三维全零数组的方法
Nov 12 Python
在python里从协程返回一个值的示例
Feb 19 Python
20行python代码实现人脸识别
May 05 Python
PyQt5通信机制 信号与槽详解
Aug 07 Python
详解Python中的format格式化函数的使用方法
Nov 20 Python
Python中Flask-RESTful编写API接口(小白入门)
Dec 11 Python
解决运行django程序出错问题 'str'object has no attribute'_meta'
Jul 15 Python
把Anaconda中的环境导入到Pycharm里面的方法步骤
Oct 30 Python
python爬虫用request库处理cookie的实例讲解
Feb 20 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全排列递归算法代码
2012/10/09 PHP
Laravel框架实现的使用smtp发送邮件功能示例
2019/03/12 PHP
laravel框架如何设置公共头和公共尾
2019/10/22 PHP
用javascript操作xml
2006/11/04 Javascript
一段利用WSH修改和查看IP配置的代码
2008/05/11 Javascript
点击button获取text内容并改变样式的js实现
2014/09/09 Javascript
js判断手机访问或者PC的几个例子(常用于手机跳转)
2015/12/15 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
JavaScript实现格式化字符串函数String.format
2016/12/16 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
AngularJS自定义指令详解(有分页插件代码)
2017/06/12 Javascript
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
axios中cookie跨域及相关配置示例详解
2017/12/20 Javascript
解决vue打包css文件中背景图片的路径问题
2018/09/03 Javascript
详解Nodejs get获取远程服务器接口数据
2019/03/26 NodeJs
JS中使用react-tooltip插件实现鼠标悬浮显示框
2019/05/15 Javascript
layui实现数据表格点击搜索功能
2020/03/26 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
javascript实现扫雷简易版
2020/08/18 Javascript
Python工程师面试题 与Python基础语法相关
2016/01/14 Python
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
Python爬取qq music中的音乐url及批量下载
2017/03/23 Python
python使用SMTP发送qq或sina邮件
2017/10/21 Python
Python根据指定日期计算后n天,前n天是哪一天的方法
2018/05/29 Python
numpy中的ndarray方法和属性详解
2019/05/27 Python
Python基于当前时间批量创建文件
2020/05/07 Python
解决pytorch 保存模型遇到的问题
2021/03/03 Python
使用postMessage让 iframe自适应高度的方法示例
2019/10/08 HTML / CSS
英国办公用品商店:Office Outlet
2018/04/04 全球购物
远程学习的教学用品和家庭学习资源:Really Good Stuff
2020/04/27 全球购物
吃空饷专项治理工作实施方案
2014/03/04 职场文书
竞选劳动委员演讲稿
2014/04/28 职场文书
实习协议书范本
2014/09/25 职场文书
2014年教研组工作总结
2014/11/26 职场文书
vue如何在data中引入图片的正确路径
2022/06/05 Vue.js
HTML中link标签属性的具体用法
2023/05/07 HTML / CSS