Django 用户认证及OneToOneField

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,redirectimport modelsfrom 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,HttpResponseRedirectimport modelsfrom django.core.paginator import Paginator, EmptyPage, PageNotAnIntegerfrom app01 import formsfrom django.contrib.auth.decorators import login_requiredfrom  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(‘/‘) 跳转到登录页面
时间: 2024-10-13 22:05:44

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

Django用户认证系统 authentication system

Django集成了用户登陆/验证/登出的模块,可以直接拿来使用,也可以进行定制,使用起来非常方便. 一,创建Django工程 $ django-admin.py startproject mysite 工程目录结构如下 [email protected]:~/Study/django$ tree mysite/ mysite/ ├── manage.py └── mysite ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py 1 di

16 django用户认证组件

django用户认证组件 思考: 前一篇提到的seesion,当用户登录后会保存session. 浏览器再次访问会带上服务器返回的session:sessionid ---> 登录时随机生成的key 服务器拿到sessionid后去数据库匹配,匹配到后拿到一个字典数据:{a:b,c:d} 当数据有变化时,会更新某个值,如 c:d --> c:e ,那么直接更新数据库 {a:b,c:e},sessionid并不会变化,然后将原来的sessionid继续回传给浏览器. 这样的处理机制存在什么样的问

2014-10-27 Django用户认证

Django自身带有用户认证的模块. 如图:account_login是用户自定义的函数. auth.authenticate(username=username,password=password)用于验证用户名和登录密码.若存在该用户名和密码则返回一个非空值. (注意:Django在admin后台的User中验证用户.若想取消该用户的登录权限,可点选该用户名并下拉页面将其属性值Active去掉勾选.) 可通过request.user获取用户名. auth.login(request,user

django用户认证系统——登录4

用户已经能够在我们的网站注册了,注册就是为了登录,接下来我们为用户提供登录功能.和注册不同的是,Django 已经为我们写好了登录功能的全部代码,我们不必像之前处理注册流程那样费劲了.只需几分钟的简单配置,就可为用户提供登录功能.接下来就来看看如何使用内置的登录功能. 引入内置的 URL 模型 Django 内置的登录.修改密码.找回密码等视图函数对应的 URL 模式位于 django.contrib.auth.urls.py 中,首先在工程的 urls.py 文件里包含这些 URL 模式.打开

10.Django用户认证组件

用户认证组件: 功能:用session记录登录验证状态: 前提:用户表,django自带的auth_user 创建超级用户:python manage.py createsuperuser           kris的密码是abc123456 基于用户认证组件的登录验证信息储存 views.py from django.shortcuts import render, HttpResponse, redirect # Create your views here. from django.co

Django 用户认证组件

auth模块 # 创建超级用户 python manage.py createsuperuser from django.contrib import auth django.contrib.auth中提供了许多方法: authenticate() 提供了用户认证功能,即验证用户名以及密码是否正确,一般需要username .password两个关键字参数. 如果认证成功(用户名和密码正确有效),便会返回一个 User 对象. authenticate()会在该 User 对象上设置一个属性来标

django 用户认证系统

django认证系统包含三个部分:用户.权限和分组 安装 django项目默认启用了认证系统,如果不是使用django-admin.py创建项目的可以通过在settings配置文件里面的INSTALLED_APPS的列表里面添加django.contrib.auth和django.contrib.contenttypes这两项然后运行manage.py syncdb命令创建对应的数据库表即可 用户Users 在Django-1.4.10\django\contrib\auth这个目录下有一个mo

Django用户认证系统(二)Web请求中的认证

在每个Web请求中都提供一个 request.user 属性来表示当前用户.如果当前用户未登录,则该属性为AnonymousUser的一个实例,反之,则是一个User实例. 你可以通过is_authenticated()来区分,例如: if request.user.is_authenticated(): # Do something for authenticated users. else: # Do something for anonymous users. 登陆login login(

Django用户认证系统(一)User对象

User对象 User对象是认证系统的核心.用户对象通常用来代表网站的用户,并支持例如访问控制.注册用户.关联创建者和内容等.在Django认证框架中只有一个用户类,例如超级用户('superusers’)或('staff')用户只不过是相同用户对象设置了不同属性而已. 缺省字段Fields username 用户名,必需字段.30个字符或更少,可以包含 _, @, +, . 和 - 字符. first_name可选. 30 characters or fewer. last_name可选. 3