Django 用户认证如果自己不想写 就可以用django自带的认证

首选导入模块 models.py

#!/usr/bin/env python
#_*_ coding:utf8 _*_ from __future__ import unicode_literals
from django.db import models
from django.core.exceptions import ValidationError
from django.contrib.auth.models import User

每创建一个用户都在

class UserProfile(models.Model):
user = models.OneToOneField(User)
name = models.CharField(max_length=64)
school = models.ForeignKey('School')
def __unicode__(self):
return self.name

OneToOneField字段是一对一 不能重复 关联的关系

用户认证

首选实现一个简单的访问

大项目urls.py

from django.conf.urls import url,include
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.index),
]

views.py   views.py在app01下面

#!/usr/bin/env python
#_*_ coding:utf8 _*_
from django.shortcuts import render,redirect
import models
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
def index(request):
return render(request,'crm/index.html')

在crm下面创建index.html  代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
Welcome to Oldboy CRM
</body>
</html>

访问http://127.0.0.1:8000

认证之后 才能看到页面信息如何实现呢  这个在实际工作当中经常遇到的 如何实现呢 一步一步实现

views.py

#!/usr/bin/env python
#_*_ coding:utf8 _*_
from django.shortcuts import render,redirect
import models
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from app01 import forms
from django.contrib.auth.decorators import login_required @login_required
def index(request):
return render(request,'crm/index.html')

导入模块 login_required  在函数下面 加上装饰器 进行验证

再次访问试试

跳转到http://127.0.0.1:8000/accounts/login/?next=/    这个链接地址

好 我们来写个简单的登录页面

urls代码如下

from django.conf.urls import url,include
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.index),
url(r'^accounts/login/$', views.acc_login), ]

 

views.py代码如下:

#!/usr/bin/env python
#_*_ coding:utf8 _*_
from django.shortcuts import render,redirect,HttpResponseRedirect
import models
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
from app01 import forms
from django.contrib.auth.decorators import login_required
from django.contrib.auth import authenticate,login,logout
@login_required
def index(request):
return render(request,'crm/index.html') def acc_login(request):
if request.method == 'POST':
print(request.POST)
user = authenticate(username=request.POST.get('username'),
password=request.POST.get('password'))
if user is not None:
login(request,user)
return HttpResponseRedirect('/')
else:
login_err = "Wrong username or password!"
return render(request,'crm/login.html',{'login_err':login_err})
return render(request,"crm/login.html")

  

建立模板html  index.html

index.html代码如下

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>Oldboy Welcome</h1> {% block page-container %}
Welcome to Oldboy CRM
<div>
{% if request.user.is_authenticated %}
<span>{{ request.user.userprofile.name }}</span>
{% else %}
<span>登录/注册</span>
{% endif %}
</div> {% endblock %} </body>
</html>

login.html代码如下

{% extends 'crm/index.html' %}

{% block page-container %}
<form action="" method="post"> {% csrf_token %} Username: <input type="text" name="username">
Password: <input type="password" name="password">
<input type="submit" value="Log me in">
{% if login_err %}
<div style="color: red">{{ login_err }}</div> #前端判断错误 如果错误显示views里面的内容
{% endif %}
</form>
{% endblock %}]

好 我们实现了访问用户限制

http://127.0.0.1:8000 自动跳转到

我们输入正确的用户名 密码会跳转到index.html页面

user = authenticate(username=request.POST.get('username'),
password=request.POST.get('password'))
if user is not None:
login(request,user)
return HttpResponseRedirect('/')

显示用户名登录成功名字如何显示和退出系统

显示登录成功的名字 需要在前端显示

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<h1>Oldboy Welcome</h1> {% block page-container %}
Welcome to Oldboy CRM
<div>
{% if request.user.is_authenticated %}
<span>{{ request.user.userprofile.name }}</span>
{% else %}
<span>登录/注册</span>
{% endif %}
</div>
<div>
<a href="/accounts/logout/">退出系统</a>
</div>
{% endblock %} </body>
</html>

看红色显示部分

退出系统代码 看黄色部分 前端

url代码如下

from django.conf.urls import url,include
from django.contrib import admin
from app01 import views urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^$', views.index),
url(r'^accounts/login/$', views.acc_login),
url(r'^accounts/logout/$', views.acc_logout),
]

views.py代码如下:

def acc_logout(request):
logout(request)
return HttpResponseRedirect('/')

点击退出系统 跳转到

<a href="/accounts/logout/">退出系统</a>
def acc_logout(request):
logout(request)
return HttpResponseRedirect('/') 跳转到登录页面

Django 用户认证及OneToOneField的更多相关文章

  1. django用户认证系统——拓展 User 模型

    Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息.对于 Django 内置的 User 模型, 仅包含以下一些主要的属性: username,即用户名 ...

  2. django用户认证系统——拓展 User 模型2

    Django 用户认证系统提供了一个内置的 User 对象,用于记录用户的用户名,密码等个人信息.对于 Django 内置的 User 模型, 仅包含以下一些主要的属性: username,即用户名 ...

  3. [django]用户认证中只允许登陆用户访问(网页安全问题)

    当设计一个重要网页时,一般要求未从登陆界面访问的用户不能进入其他页面,那么需要如何设置呢? 如下 django中的url.py urlpatterns = [    url(r'^$', 'login ...

  4. “Django用户认证系统”学习资料收集

    首推追梦人物——Django用户认证系统 待续……

  5. Django 2.0 学习(17):Django 用户认证(auth模块)

    Django 用户认证(auth模块) 一.认证登陆 在进行用户登陆验证的时候,如果是自己写代码,就必须要先查询数据库,看用户输入的用户名是否存在于数据库中:如果用户存在于数据库中,然后再验证用户输入 ...

  6. django用户认证系统——重置密码7

    当用户不小心忘记了密码时,网站需要提供让用户找回账户密码的功能.在示例项目中,我们将发送一封含有重置用户密码链接的邮件到用户注册时的邮箱,用户点击收到的链接就可以重置他的密码,下面是具体做法. 发送邮 ...

  7. django用户认证系统——修改密码6

    再此之前我们已经完成了用户登录.注册.注销等功能,接下来让我们继续为用户提供修改密码的功能.该功能 Django 的 auth 应用也已经为我们提供,过程几乎和之前的登录功能完全一样. 编写修改密码模 ...

  8. django用户认证系统——基本设置1

    网站提供登录.注册等用户认证功能是一个常见的需求.因此,Django 提供了一套功能完整的.灵活的.易于拓展的用户认证系统:django.contrib.auth.在本教程中,我将向你展示 auth ...

  9. Django——用户认证

    Django--用户认证 用户与Authentication(身份验证) Django 用户认证系统处理用户帐号,组,权限以及基于cookie的用户会话. 这个系统一般被称为 auth/auth (认 ...

随机推荐

  1. 计算机网络课程优秀备考PPT之第五章网络层(五)

    为了记录自己从2016.9~2017.1的<计算机网络>助教生涯,也为了及时梳理和整写笔记! 前期博客是, 计算机网络课程优秀备考PPT之第一章概述(一) 计算机网络课程优秀备考PPT之第 ...

  2. String类之indexOf--->查找某字对应的位置

    以下方法都是java内置类String类的内置方法(不是构造方法哦,就是普通的方法),不需要我们写,直接拿过来用即可. indexOf方法对应Api介绍 lastIndexOf方法对应Api介绍 -- ...

  3. jQuery复习:第四章

    一.jQuery中的事件 1.加载DOM $(document).ready()和window.onload方法具有类似功能,但是执行时机不同.window.onload方法是在网页中所有的元素都加载 ...

  4. 遍历(二)javascript的Foreach语法

    原文:http://www.cnblogs.com/Fskjb/archive/2011/03/26/1996165.html 首先,虽然叫foreach语法但关键字还是用for哦,这个语法只是对平时 ...

  5. Modernizr 测试浏览器是否兼容相应属性

    Modernizr  测试浏览器是否兼容相应属性

  6. wep密钥的长度

    理论上,WEP可以搭配任意长度的密钥,因为RC4并未要求非得使用特定长度的密钥. 不过,大多数产品均支持一种或两种长度的密钥.唯一出现在标准中的密钥长度时64位的WEP种子(seed),其中40位是两 ...

  7. MySQL(1) - 基础

    参考资料: http://www.jianshu.com/p/91e3af27743f 一.MySQL介绍以及安装 1.1 MySQL介绍 MariaDB数据库管理系统是MySQL的一个分支,主要由开 ...

  8. strings

    3.1.1.1 计算列表中的字符串数目 使用Count属性可计算列表中的字符串数目.Count是只读属性,用以指示列表中字符串列表数目.因为字符串列表是以零开始索引,因而Count比列表的最大索引数大 ...

  9. IO.Path路径

    string filePath =@"E:/Randy0528/中文目录/JustTest.rar"; 更改路径字符串的扩展名.System.IO.Path.ChangeExten ...

  10. tableview 详解I

    在开发iphone的应用时基本上都要用到UITableView,这里讲解一下UITableView的使用方法及代理的调用情况 UITableView使用详解 - (void)viewDidLoad { ...