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找出9个连续的空闲端口
Feb 01 Python
python3批量删除豆瓣分组下的好友的实现代码
Jun 07 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
Dec 08 Python
用python制作游戏外挂
Jan 04 Python
利用Python代码实现数据可视化的5种方法详解
Mar 25 Python
深入理解Python异常处理的哲学
Feb 01 Python
关于PyTorch源码解读之torchvision.models
Aug 17 Python
python实现通过队列完成进程间的多任务功能示例
Oct 28 Python
浅谈Python中os模块及shutil模块的常规操作
Apr 03 Python
Python多线程threading创建及使用方法解析
Jun 17 Python
如何通过python检查文件是否被占用
Dec 18 Python
Python3 使用pip安装git并获取Yahoo金融数据的操作
Apr 08 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实现的XML操作类【XML Library】
2016/12/29 PHP
PHP框架Laravel中实现supervisor执行异步进程的方法
2017/06/07 PHP
php面试实现反射注入的详细方法
2019/09/30 PHP
QQ登录简单实现代码
2021/03/09 Javascript
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
jQuery焦点图切换简易插件制作过程全纪录
2014/08/27 Javascript
javascript常用方法汇总
2014/12/02 Javascript
Javascript 拖拽雏形中的一些问题(逐行分析代码,让你轻松了拖拽的原理)
2015/01/23 Javascript
js判断手机端(Android手机还是iPhone手机)
2015/07/22 Javascript
JavaScript知识点总结(四)之逻辑OR运算符详解
2016/05/31 Javascript
AngularJS入门教程之过滤器用法示例
2016/11/02 Javascript
node.js+captchapng+jsonwebtoken实现登录验证示例
2017/08/17 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
layer.open 获取不到表单信息的解决方法
2019/09/26 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
Nodejs 数组的队列以及forEach的应用详解
2021/02/25 NodeJs
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
2018/02/21 Python
Python实现压缩文件夹与解压缩zip文件的方法
2018/09/01 Python
如何修复使用 Python ORM 工具 SQLAlchemy 时的常见陷阱
2019/11/19 Python
python 实现批量替换文本中的某部分内容
2019/12/13 Python
python实现指定ip端口扫描方式
2019/12/17 Python
如何在sublime编辑器中安装python
2020/05/20 Python
python 通过文件夹导入包的操作
2020/06/01 Python
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
家用个人磨皮机:Trophy Skin
2017/03/30 全球购物
科颜氏印度官网:Kiehl’s印度
2021/02/20 全球购物
EJB与JAVA BEAN的区别
2016/08/29 面试题
学生周末长期请假条
2014/02/15 职场文书
村干部培训班主持词
2014/03/28 职场文书
应急处置方案
2014/06/16 职场文书
计算机系统管理员求职信
2014/06/20 职场文书
党支部创先争优公开承诺书
2015/04/30 职场文书
《检阅》教学反思
2016/02/22 职场文书
使用@Value值注入及配置文件组件扫描
2021/07/09 Java/Android
mysql中varchar类型的日期进行比较、排序等操作的实现
2021/11/17 MySQL