Django1.9开发博客(9)- 用户认证
你应该注意到了一点,当你去新建、修改和删除文章的时候并不需要登录,这样的话任何浏览网站的用户都能随时修改和删除我的文章。这个可不是我想要的!
编辑和删除的认证
我们需要保护post_new, post_edit和post_publish这三个视图,只有登录用户才有权去执行。 django为我们提供了很好的帮助类,其实就是利用了python中的decorators技术。 django中认证的装饰器位于模块django.contrib.auth.decorators中,名称叫login_required。
编辑blog/views.py文件,在import部分添加如下的导入语句:
1 |
from django.contrib.auth.decorators import login_required |
然后在post_new, post_edit和post_publish这三个函数上添加@login_required, 类似下面
1 |
@login_required |
好的,现在你再去访问下http://localhost:8000/post/new/,看看有啥变化。
注:如果你仍然能正常进入新建页面,那可能是你之前在admin界面登陆过。 那么你需要先退出,访问http://localhost:8000/admin/logout/可以退出,然后你再看下效果。
我刚刚添加的@login_required装饰器检测到你尚未登陆的时候会重定向到login页面, 但是我现在还没有定义login的模板页面,所以这时候会是404错误页面。
用户登录
django在用户认证方面做得很好了,我们只需要去使用它就行。
在mysite/urls.py文件中,添加下面一行
1 |
url(r'^accounts/login/$', 'django.contrib.auth.views.login') |
现在这个文件内容如下:
1 |
from django.conf.urls import patterns, include, url from django.contrib import admin |
然后我们再定义一个登陆页面,创建目录mysite/templates/registration, 并在里面新建模板文件login.html,内容如下:
1 |
{% extends "mysite/base.html" %} {% block content %} {% if form.errors %} |
你可以看到我们仍然使用到了模板继承。这个时候可以定义一个mysite/templates/mysite/base.html, 把blog/templates/blog/base.html的内容复制给它即可。
不过我们需要在mysite/settings.py中再添加一个urls配置:
1 |
LOGIN_REDIRECT_URL = '/' |
这样的话当用户直接访问login页面后登录成功会重定向到文章列表页面去。
改进显示
现在的确只有登录用户才能修改和删除文章,但是未登录用户却能看到这些按钮, 这个是很不好的体验。现在如果是未登录用户的话就把这些按钮给隐藏掉。
因此我们修改mysite/templates/mysite/base.html如下:
1 |
<body> |
然后修改blog/templates/blog/post_detail.html如下:
1 |
{% extends 'blog/base.html' %} {% block content %} |
用户注销
当用户登录后显示欢迎语句,Hello ,然后后面跟一个logout链接。还是依靠django帮我们处理logout动作。
修改mysite/templates/mysite/base.html文件如下:
1 |
<div class="page-header"> |
很显然这时候logout肯定会报错。我们还得做些事情。
对于这方面的详细文档请参考:https://docs.djangoproject.com/en/1.9/topics/auth/default/
打开mysite/urls.py文件,添加一个logout配置:
1 |
from django.conf.urls import patterns, include, url from django.contrib import admin |
如果访问网站时出现模板找不到错误,那么你就在mysite/settings.py中添加如下配置:
1 |
# TEMPLATE_DIRS |
好的,现在你已经可以达成如下的效果了:
- 需要一个用户名和密码登录系统
- 在添加/编辑/删除/发布文章的时候需要登录
- 也能注销
Django1.9开发博客(9)- 用户认证的更多相关文章
- Django1.7开发博客
转自: http://www.pycoding.com/articles/category/django 基于最新的django1.7写的,通俗易懂,非常适合新手入门. 感谢博主! 参考教程: htt ...
- Django1.9开发博客(14)- 集成Xadmin
xadmin是一个django的管理后台实现,使用了更加灵活的架构设计及Bootstrap UI框架, 目的是替换现有的admin,国人开发,有许多新的特性: 兼容 Django Admin 使用 B ...
- Django1.9开发博客(12)- i18n国际化
国际化与本地化的目的为了能为各个不同的用户以他们最熟悉的语言和格式来显示网页. Django能完美支持文本翻译.日期时间和数字的格式化.时区. 另外,Django还有两点优势: 允许开发者和模板作者指 ...
- Django1.9开发博客(7)- 实现功能
到目前为止我们已经完成了一个django应用的所有基础部分. 包括url配置.视图.模型和模板.接下来开始继续完善我们的博客系统了. 首先我们需要一个显示每篇文章的详细页面,对不? 文章详情 对于首页 ...
- Django1.9开发博客(11)- 富文本与代码高亮
TinyMCE是一个轻量级的基于浏览器的所见即所得编辑器,支持目前流行的各种浏览器,由JavaScript写成. 功能配置灵活简单(两行代码就可以将编辑器嵌入网页中),支持AJAX.另一特点是加载速度 ...
- Django1.9开发博客(8)- 继续完善
到现在为止我们已经完成的差不多了,并且基本的东西都已经学到了,是时候用起来了. 我们的博客还有很多功能需要完善,下面抛砖引玉新增几个功能,还有其他功能等你自己去发现和实现. 草稿箱 之前我们新建文章的 ...
- Django1.9开发博客(13)- redis缓存
Redis 是一个高性能的key-value数据库.redis的出现, 很大程度补偿了memcached这类keyvalue存储的不足,在部分场合可以对关系数据库起到很好的补充作用. 它提供了Pyth ...
- Django1.9开发博客(10)- 全文搜索
Django本身不提供全文检索的功能,但django-haystack为其提供了全文检索的框架. django-haystack能为Django提供whoosh,solr,Xapian和Elastic ...
- Django1.9开发博客(6)- 模板继承
模板继承就是网站的多个页面可以共享同一个页面布局或者是页面的某几个部分的内容.通过这种方式你就需要在每个页面复制粘贴同样的代码了. 如果你想改变页面某个公共部分,你不需要每个页面的去修改,只需要修改一 ...
随机推荐
- Java 使用jaxp删除节点
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <perso ...
- jq html 页面点击图片直接上传
<form id="ff" method="post" enctype="multipart/form-data" style=&qu ...
- Pyhton 学习总结 21 :fileinput模块
fileinput模块可以对一个或多个文件中的内容进行迭代.遍历等操作.该模块的input()函数有点类似文件readlines()方法,区别在于前者是一个迭代对象,需要用for循环迭代,后者是一次性 ...
- Fitnesse在eclipse中的调试
需要在Fitnesse的wik中添加: '''此句话专门用来Debug'''!define COMMAND_PATTERN {java -Xdebug -Xrunjdwp:transport=dt_s ...
- C++之路进阶——codevs1362(网络扩容)
1362 网络扩容 省队选拔赛 时间限制: 2 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给定一张有向图,每条边都有一个容量 ...
- axure rp pro 7.0(页面原型工具)
axure rp pro 7.0 下载连接:地址
- ef第一次启动较慢
解决ef第一次启动较慢的问题: protected void Application_Start() { //禁用第一次ef查询对表__MigrationHistory的问题使用了ef的Code fi ...
- vsftpd.conf 怎么保存
引用:http://zhidao.baidu.com/question/169939742.html vsftpd.conf 用vim编辑后如何保存?网上很多我都看了 esc 然后shift+ 不好使 ...
- JS代码执行顺序
JavaScript执行引擎并非一行一行地分析和执行程序,而是一段一段地分析执行的.而且在分析执行同一段代码中,定义式的函数语句会被提取出来优先执行.函数定义执行完后,才会按顺序执行其他代码. 先看看 ...
- apache svn subversion安装和配置(使用源码安装包方式)
环境:虚拟机下centos7 1.下载安装包:http://subversion.apache.org/download.cgi 2.上传到指定文件夹并解压 3.安装依赖包 apr apr-utils ...