最近在用django做一个小网站,在做用户登录的这个模块,一开始想自己实现的,后面发现真的很复杂。
就拿了django自带的用户系统来使用了。在这中间出了很多的问题,现在记录下
网站的基础模板包含一个导航条,和大部分网站一样,就是没有登录显示登录。登录后就显示用户名
在前端页面使用了的话,可以拿user对象来使用
<div class="userinfo">
{% if user.is_authenticated %}
欢迎您:{{user.username}}
{% else %}
<a href="/account/login">登录</a>
<a href="/account/register">注册</a>
{% endif %}
<a href="/account/logout">注销</a>
</div>
要在页面引入这个user对象的话,就必须在django的settings里面加入一下的代码:
TEMPLATE_CONTEXT_PROCESSORS = (
"django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.request",
)
其中 django.contrib.auth.context_processors.auth就包含user对象
其实就是一些上下文处理器,这些处理器都返回一个字典。例如。我们看auth的代码。
def auth(request):
def get_user():
if hasattr(request, 'user'):
return request.user
else:
from django.contrib.auth.models import AnonymousUser
return AnonymousUser()
return {
'user': SimpleLazyObject(get_user),
'messages': messages.get_messages(request),
'perms': lazy(lambda: PermWrapper(get_user()), PermWrapper)(),
}
可以看到user对象就是这样被返回回来供我们使用的,取得user对象是调用一个方法从request里面取。如果没有取到的话就是匿名用户了。这样在页面的验证就会被判断会匿名
一个登录和登出的代码
# -*- coding:utf-8 -*-
# Create your views here.
from django.shortcuts import render_to_response,render,get_object_or_404
from CodeShare.account.forms import UserRegisterForm
from django.http import HttpResponse, HttpResponseRedirect
from django.contrib.auth.models import User
from django.contrib.auth import authenticate, login as user_login, logout as user_logout
def index(request):
#用户的个人页面
return render(request,'account/index.html')
def register(request):
#注册提交
if request.method == 'POST':
form = UserRegisterForm(data=request.POST)
if form.is_valid():
new_user = User.objects.create_user(request.POST['username'], request.POST['email'], request.POST['password'])
new_user.save()
return render(request,'account/index.html')
else:
return render(request,'account/register.html', {'form':form})
#超链接点击过来的注册
else:
return render(request,'account/register.html')
# return render_to_response('user/register.html', context_instance=RequestContext(request))
def login(request):
#表单提交过来的数据
if request.user.is_authenticated():
return HttpResponse('你已经登录')
if request.method == 'POST':
username = request.POST['username']
password = request.POST['password']
user = authenticate(username=username, password=password)
if user is not None:
if user.is_active:
user_login(request, user)
return HttpResponseRedirect('/account/%d' % user.id)
else:
return HttpResponse('用户没有启用!')
else:
return HttpResponse('用户名或者密码错误!')
else:
return render_to_response('account/login.html')
def logout(request):
user_logout(request)
return render_to_response('index.html')
这里的登录和登出都是使用自带的方法,只是import进来避免同名取了个别名
当用户验证通过后
使用user_login(request, user) 就会把用户存到session里面。
而删除也就是从session中销毁
这里有一个很重要的问题
如果要在页面使用user,那么页面必须要有request对象(为什么?因为user就是从request里面取的)
所以在渲染页面的时候。如果要使用这个验证,就必须要把request对象也渲染进去
我之前渲染页面就是用return render_to_response('index.html')
这样的话,只是单纯渲染页面。是不会把request传进去的。必须显式的指定
加入context_instanse=RequestContext(request)才有办法在页面使用
但是每次render都这样写是不是很烦?
django1.3新增了一个shortcut
render
其实就是一默认使用RequestContext的render_to_response
这个方法除了有一个必须的第一个参数 request
外,和render_to_response都一样
使用传统的页面重定向,是默认会带入request的,如使用HttpResponseRedirect
ps:记一个pydev的问题
在pydev里面写django代码。如果想引入django的settings文件
要设置好django项目的2个变量。不然会import出错 提示找不到
(其实默认是设置好的)
右键项目 找到PYTHON-PYTHONPATH
在里面的String subsitution Variables里面
必须有2个变量
DJANGO_MENAGE_LOCATION 你项目的manage,py的地址
DJANGO_SETTINGS_MODULE settings文件的路径(注意这里的路径是python的路径。也就是包名形式的,如果是路径形式的话会出错)
分享到:
相关推荐
Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统源码 Django客户管理系统...
【标题】"基于 Django + Vue 实现的 用户信息管理系统"是一个综合性的项目,结合了Python的Django框架和JavaScript的Vue.js库,用于构建一个功能完善的用户信息管理系统。这个系统旨在提供用户信息的创建、查看、...
1. 高度集成化:Django包含了很多常用功能,如自动化ORM系统、Form系统、Cache系统、Routing、Middleware、Template系统等,这样就能够很方便的使用这些功能,不需要自己来实现这些底层的功能。 2. 自动化Admin管理...
使用Django+MySQL实现的在线电影推荐系统源码 使用Django+MySQL实现的在线电影推荐系统源码 使用Django+MySQL实现的在线电影推荐系统源码 使用Django+MySQL实现的在线电影推荐系统源码 使用Django+MySQL实现...
3. **mysql数据库**:这可能是指系统使用MySQL作为数据库存储图书和用户信息。MySQL是一个广泛使用的开源关系型数据库,与Django有良好的集成,支持复杂的数据操作和事务处理。 4. **PythonProject**:这个文件夹...
在这个“Django个人博客系统”课程中,我们将深入探讨如何使用Django构建一个功能完善的个人博客平台。 首先,我们要了解Django的基本架构。Django的核心组件包括模型(Model)、视图(View)、模板(Template)和...
在本文中,我们将深入探讨如何使用Django框架构建一个会员管理系统。Django作为一个强大的Python Web开发框架,提供了许多内置的功能,如用户认证、权限管理等,使得开发人员能够快速高效地构建复杂的Web应用。 ...
【Django的资产管理系统源码】是一套使用Python的Django框架编写的简易资产管理软件教程。这个系统虽然规模不大,但包含了实现一个完整管理系统的必要组件,是学习Django开发的良好实践案例。该项目构建在Django 2.2...
Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书借阅系统 Django实现的图书...
4. **URL路由**:Django通过URLconf(URL配置)系统将URL映射到视图函数,使得用户可以通过特定的URL访问到相应的页面。商品管理系统的URL配置会包括商品列表页、详情页、购物车、结账等页面的URL。 5. **中间件...
2. 材料文件导入:系统允许用户上传材料文件,这通常涉及到文件上传的处理,如通过HTML表单提交,然后在后端使用Django的`request.FILES`来接收。文件可能被存储在服务器的特定目录,或者上传到云存储服务如Amazon ...
Django的模板系统使用HTML模板文件,其中嵌入了Python表达式和控制结构。例如,`album_list.html`可能展示所有相册的列表,而`album_detail.html`则展示相册详情,包括其包含的照片。 **6. 表单处理** Django的表单...
综上所述,基于Python的Django物资管理系统是一个综合性的Web应用,涉及到前端界面设计、后端数据处理、用户交互等多个方面。虽然目前系统可能还有待完善,但它已具备了基本的物资管理能力,并且有着广阔的功能扩展...
Python基于Django的在线考试系统,前端使用Vue开发,该系统的特色在于实现了注册登录,用户管理,班级管理,考试管理,题库管理,随机组卷,自动阅卷,在线考试,模拟练习,在线判题等功能,学生登录考试系统后,...
10. **性能优化**:随着用户数量的增长,我们可能需要考虑缓存策略(如使用Django的缓存框架)和数据库查询优化(如使用数据库索引)来提升系统性能。 通过以上步骤,我们可以逐步构建起一个功能完备、用户体验良好...
- Django框架基础:如模型-视图-控制器(MVC)架构、模板系统、表单处理、用户认证与权限管理。 - Python编程:变量、数据类型、控制结构、函数、类和模块的使用。 - 数据库操作:通过Django ORM(对象关系映射)...
《基于Django的教务信息管理系统详解》 在信息技术飞速发展的今天,教务管理系统的构建对于提升教育机构的工作效率和管理水平具有重要意义。本系统基于Python的Web开发框架Django,实现了全面、高效的教务信息管理...
【描述】:这个项目是一个使用Python的Django框架构建的企业级办公自动化(OA)管理系统。它旨在提高企业内部的工作效率,实现信息的快速传递,优化业务流程,并简化日常办公任务。 【详细知识点】: 1. Django...
Python Django + Bootstrap 实现用户管理系统是一种常见的Web应用开发方式,结合了Python的高效与Django框架的强大,以及Bootstrap的响应式设计。以下是对这个主题的详细解析: **Python Django** Django是Python的...
【基于Django的宿舍管理系统】是一个使用Python的Web框架Django开发的应用程序,它提供了全面的宿舍管理解决方案。Django以其MVT(Model-View-Template)架构模式著名,能够高效地构建复杂、数据驱动的Web应用。在这...