网站怎么做扫码微信支付接口代理网址怎么用
news/
2025/9/22 16:21:44/
文章来源:
网站怎么做扫码微信支付接口,代理网址怎么用,ps制作网站过程,成都网站建设cdsqywl之前了解了#xff1a;
创建Django项目 数据库 模板 表格提交 admin管理页面 上面的功能模块允许我们做出一个具有互动性的站点#xff0c;但无法验证用户的身份。我们这次了解用户验证部分。通过用户验证#xff0c;我们可以根据用户的身份#xff0c;提供不同的服务。
…之前了解了
创建Django项目 数据库 模板 表格提交 admin管理页面 上面的功能模块允许我们做出一个具有互动性的站点但无法验证用户的身份。我们这次了解用户验证部分。通过用户验证我们可以根据用户的身份提供不同的服务。
一个Web应用的用户验证是它的基本组成部分。我们在使用一个应用时总是从“登录”开始到“登出”结束。另一方面用户验证又和网站安全、数据库安全息息相关。HTTP协议是无状态的但我们可以利用储存在客户端的cookie或者储存在服务器的session来记录用户的访问。
Django有管理用户的模块即django.contrib.auth。你可以在mysite/settings.py里看到这个功能模块已经注册在INSTALLED_APPS中。利用该模块你可以直接在逻辑层面管理用户不需要为用户建立模型也不需要手工去实现会话。
创建用户
你可以在admin页面直接看到用户管理的对话框即Users。从这里你可以在这里创建、删除和修改用户。点击Add增加用户daddy密码为daddyiscool。
在admin页面下我们还可以控制不同用户组对数据库的访问权限。我们可以在Groups中增加用户组设置用户组对数据库的访问权限并将用户加入到某个用户组中。
在这一章节中我们创立一个新的app即users。下文的模板和views.py都针对该app。
用户登录
我们建立一个简单的表格。用户通过该表格来提交登陆信息并在Django服务器上验证。如果用户名和密码正确那么登入用户。
我们首先增加一个登录表格
form roleform action/login methodpostlabelUsername/labelinput typetext nameusernamelabelPassword/labelinput namepassword typepasswordinput typesubmit valueSubmit/form
我们在views.py中定义处理函数user_login()来登入用户
# -*- coding: utf-8 -*-
from django.shortcuts import render, redirect
from django.core.context_processors import csrf
from django.contrib.auth import *def user_login(request):loginif request.POST:username password username request.POST.get(username)password request.POST.get(password)user authenticate(usernameusername, passwordpassword)if user is not None and user.is_active:login(request, user)return redirect(/)ctx {}ctx.update(csrf(request))return render(request, login.html,ctx)
上面的authenticate()函数可以根据用户名和密码验证用户信息。而login()函数则将用户登入。它们来自于django.contrib.auth。
作为替换我们可以使用特别的form对象而不自行定义表格。这将让代码更简单而且提供一定的完整性检验。
登出
有时用户希望能销毁会话。我们可以提供一个登出的URL即/users/logout。登入用户访问该URL即可登出。在views.py中增加该URL的处理函数
# -*- coding: utf-8 -*-
from django.shortcuts import redirectdef user_logout(request):logoutURL: /users/logoutlogout(request)return redirect(/)
我们修改urls.py让url对应user_logout()。访问http://127.0.0.1/users/logout就可以登出用户。
views.py中的用户
上面说明了如何登入和登出用户但还没有真正开始享受用户验证带来的好处。用户登陆的最终目的就是为了让服务器可以区别对待不同的用户。比如说有些内容只能让登陆用户看到有些内容则只能让特定登陆用户看到。我们下面将探索如何实现这些效果。
在Django中对用户身份的检验主要是在views.py中进行。views.py是连接模型和视图的中间层。HTTP请求会转给views.py中的对应处理函数处理并发回回复。在views.py的某个处理函数准备HTTP回复的过程中我们可以检验用户是否登陆。根据用户是否登陆我们可以给出不同的回复。最原始的方式是使用if式的选择结构
# -*- coding: utf-8 -*-
from django.http import HttpResponsedef diff_response(request):if request.user.is_authenticated():content pmy dear user/pelse:content pyou wired stranger/preturn HttpResponse(content)
可以看到用户的登录信息包含在request.user中is_authenticated()方法用于判断用户是否登录如果用户没有登录那么该方法将返回false。该user对象属于contrib.auth.user类型还有其它属性可供使用比如
在Django中我们还可以利用装饰器根据用户的登录状况来决定views.py中处理函数的显示效果。相对于上面的if结构装饰器使用起来更加方便。下面的user_only()是views.py中的一个处理函数。
from django.contrib.auth.decorators import login_required
from django.http import HttpResponselogin_required
def user_only(request):return HttpResponse(pThis message is for logged in user only./p)
注意上面的装饰器login_required它是Django预设的装饰器。user_only()的回复结果只能被登录用户看到而未登录用户将被引导到其他页面。
Django中还有其它的装饰器用于修饰处理函数。相应的http回复只能被特殊的用户看到。比如user_passes_test允许的用户必须满足特定标准而这一标准是可以用户自定义的。比如下面在views.py中增添
from django.contrib.auth.decorators import user_passes_test
from django.http import HttpResponse
def name_check(user):return user.get_username() vameiuser_passes_test(name_check)
def specific_user(request):return HttpResponse(pfor Vamei only/p)
装饰器带有一个参数该参数是一个函数对象name_check。当name_check返回真值即用户名为vamei时specific_user的结果才能被用户看到。
模板中的用户
进一步用户是否登陆这一信息也可以直接用于模板。比较原始的方式是把用户信息直接作为环境数据提交给模板。然而这并不是必须的。事实上Django为此提供了捷径我们可以直接在模板中调用用户信息。
{% if user.is_authenticated %}pWelcome, my genuine user, my true love./p
{% else %}pSorry, not login, you are not yet my sweetheart. /p
{% endif %}
不需要环境变量中定义我们就可以直接在模板中引用user。这里模板中调用了user的一个方法is_authenticated将根据用户的登录情况返回真假值。需要注意和正常的Python程序不同在Django模板中调用方法并不需要后面的括号。
用户注册
我们上面利用了admin管理页面来增加和删除用户。这是一种简便的方法但并不能用于一般的用户注册的情境。我们需要提供让用户自主注册的功能。这可以让站外用户提交自己的信息生成自己的账户并开始作为登陆用户使用网站。
用户注册的基本原理非常简单即建立一个提交用户信息的表格。表格中至少包括用户名和密码。相应的处理函数提取到这些信息后建立User对象并存入到数据库中。
我们可以利用Django中的UserCreationForm比较简洁的生成表格并在views.py中处理表格
from django.contrib.auth.forms import UserCreationForm
from django.shortcuts import render, redirect
from django.core.context_processors import csrfdef register(request): if request.method POST: form UserCreationForm(request.POST) if form.is_valid(): new_user form.save() return redirect(/) else:form UserCreationForm()ctx {form: form}ctx.update(csrf(request)) return render(request, register.html, ctx)
相应的模板register.html如下
form action methodpost{% csrf_token %}{{ form.as_p }}input typesubmit valueRegister
/form
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/909620.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!