美文网首页python之路
djano笔记(八)认证

djano笔记(八)认证

作者: 非鱼2018 | 来源:发表于2021-02-27 11:16 被阅读0次

1.用户认证

认证需要用到auth模块

使用django自带的User模型

在django shell里先创建用户,


>>> from django.contrib import auth

>>> from django.contrib.auth.models import User

>>> User.objects.create_user(username='user2001',password='123456')

<User: user2001>

验证,验证成功返回user对象

>>> auth.authenticate(username='user2001',password='123456')

<User: user2001>

如果验证失败,返回为None

>>> auth.authenticate(username='user2001',password='1234567')

没有返回

修改密码再次验证,验证成功

>>> user2001=User.objects.filter(username='user2001')[0]

>>> user2001.set_password('1234567')

>>> auth.authenticate(username='user2001',password='1234567')

<User: user2001>

此外还可以使用如下方法

create():创建一个普通用户,密码是明文的。 创建用户貌似登录不了

create_superuser():创建一个超级用户要多传一个邮箱 email 参数。

2.创建user app

python manage.py startapp users

setting文件激活模型

此外setting文件增加,LOGIN_URL = 'users:login',默认为account/login

父路由增加

path('users/', include('users.urls')),

users的子路由添加

path('', include('django.contrib.auth.urls')),

当用户请求、user/login.则会自动跳转到默认的登录视图

我们需要提供个登录的模板文件

路径在users\templates\registration\login.html

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <title>Title</title>

</head>

<body>

{% extends "myapp/base.html" %}

{% block page_header %}

<h2>用户登录</h2>

{% endblock page_header %}

{% block page_content %}

{% if form.errors %}

<p>Your username and password didn't match. Please try again.</p>

{% endif %}

<form method="post" action="{% url 'users:login' %}">

{% csrf_token %}

<!--{{ form.as_p }}-->

<div class="mb-3">

  <label for="formGroupExampleInput" class="form-label">用户名</label>

  <input type="text" class="form-control" id="formGroupExampleInput" name="username" placeholder="Example input placeholder">

</div>

<div class="mb-3">

  <label for="formGroupExampleInput2" class="form-label">密码</label>

  <input type="password" class="form-control" id="formGroupExampleInput2" name="password" placeholder="Another input placeholder">

</div>

<button name="submit"  class="btn btn-primary">Log in</button>

<input type="hidden" name="next" value="{% url 'myapp:index' %}" />

    <input type="hidden" name="next" value={{next}} />

</form>

{% endblock page_content %}

</body>

</html>

父模板添加登录连接

<a href="{% url 'users:login' %}">Log in</a>

以及注销连接

<a href="{% url 'users:logout' %}">Log out</a>

不用自己去写登录的视图,系统会自动调用默认的视图函数去认证

也可以自己去重写

from django.contrib.auth import authenticate

user = authenticate(username='john', password='secret')

if user is not None:

# A backend authenticated the credential

selse:

# No backend authenticated the credentials
image.png

*自定义登出模板

路径在users\templates\registration\logged_out.html

   {% extends "learning_logs/base.html" %}

{% block content %}

<p>已经登出,欢迎再回来!</p><a href="{% url 'users:login' %}">再次登录</a>

{% endblock content %}

路由

path('user_logout/',views.user_logout,name='user_logout')

视图

def user_logout(request):

    logout(request)

    return render(request, 'registration/logged_out.html')

再次运行,发现还是用的默认的登出

image.png

而且再次登录会跳转到admin的登录页面

image.png

将logged_out.html移动到template下面,修改视图

def user_logout(request):

    logout(request)

    return render(request, 'logged_out.html')

再次执行

image.png

*修改注册用户

3几个内置的form

from django.contrib.auth.forms import UserCreationForm,UserChangeForm

from django.http import HttpResponse

def register(request):

    """Register a new user."""

    if request.method != 'POST':

        form = UserCreationForm()

    else:

        form = UserCreationForm(data=request.POST)

        if form.is_valid():

            new_user = form.save()

            login(request, new_user)

            return redirect('myapp:index')

    # Display a blank or invalid form.

    context = {'form': form}

    return render(request, 'registration/register.html', context)

def change_user(request):

    if request.method != 'POST':

        form = UserChangeForm()

    else:

        form = UserChangeForm(data=request.POST)

        if form.is_valid():

            form.save()

            return HttpResponse("修改成功")

    # Display a blank or invalid form.

    context = {'form': form}

    return render(request, 'changgeuser.html', context)
path('', include('django.contrib.auth.urls')),

    path('register/', views.register, name='register'),

    path('user_logout/',views.user_logout,name='user_logout'),

    path('change_user/',views.change_user,name='change_user')

模板文件

{% extends "myapp/base.html" %}

{% block page_content %}

<form method="post" action="{% url 'users:change_user' %}">

{% csrf_token %}

{{ form.as_p }}

<button name="submit">修改</button>

</form>

{% endblock page_content %}

changgeuser会发现很多字段,很多字段都是非必要的,可以自己写form,然后取自己需要的字段就可以

image.png

除此之外,user模型还有一些其他的默认视图,比如重置密码,修改密码,等等,都是一些CBV,基于类的视图,在路由里指定对应模式后就可以使用

image.png

相关文章

  • djano笔记(八)认证

    1.用户认证 认证需要用到auth模块 使用django自带的User模型 在django shell里先创建用户...

  • djano前端入门

    记录在腾讯课堂中的知了课堂中的学习内容。前端环境配置: nvm安装2.node.js安装 npm install ...

  • 关于djano本地mysql

    bae不支持sql3 那么我本地用wamp,里面集成了mysql 其中,wamp修改密码的参考:http://ww...

  • Djano获取post数据

    1.获取POST中表单键值数据 如果要在django的POST方法中获取表单数据,则在客户端使用JavaScrip...

  • Djano面试题

    1. Python常用的Web开发框架 1. 企业级开发框架——Django 组成部分 2. 高并发处理框架——t...

  • 《图解http》第八、九章

    第八章 确认访问用户身份的认证1.http使用的认证方式basic认证:basic认证采用base64编码,但不是...

  • Laravel Authentication 认证系统

    Authentication 认证系统使用 Authentication学习笔记《Laravel Auth 代码阅...

  • 绘本阅读指导师心得

    绘本阅读指导师认证班21天心得笔记day20 八大智能分别是:语言智能,数学逻辑智能,视觉空间智能,身体动作智能,...

  • <白帽子web安全>读书笔记

    读书笔记 认证与会话管理 1 认证与授权 认证的目的是为了认出用户是谁,而授权的目的是为了决定用户能够做什么 2 ...

  • 绘本规划师03视觉空间智能

    绘本阅读指导师认证班21天心得笔记day6 八大智能之视觉空间智能. 视觉空间智能大致分以下几种:颜色,图形,空间...

网友评论

    本文标题:djano笔记(八)认证

    本文链接:https://www.haomeiwen.com/subject/bftftltx.html