用户注册需要邮箱的验证,找回密码需要邮箱。我选择用gmail邮箱来发送邮件,配置如下: settings.py文件中添加: #邮箱设置 EMAIL_HOST = 'smtp.gmail.com' #EMAIL_PORT = '465' EMAIL_HOST_USER = 'name@gmail.com' EMAIL_HOST_PASSWORD = 'password' EMAIL_USE_TLS = True 端口的设置,可能是默认的25,开始没有成功。 发送邮件代码: from django.core.mail import send_mail send_mail('subject','body','name@gmail.com', ['to_some@mail.com'],fail_silently=True) 非常简单。
Archive for web
用户登录的时候,选择是否记住登录状态,就是所谓的自动登录。又是从官网上找到了,兴奋ing~ django官网的文档很好,很详细。 Browser-length sessions vs. persistent sessions一节讲django的记录用户登录的机制。 settings文件里的SESSION_EXPIRE_AT_BROWSER_CLOSE为True时,在用户关闭浏览器时,登录状态就会失效。 为False是,用户关闭浏览器后,下次打开浏览器不需要重新登录。 如果需要用户能够哦你各种这个功能,我们需要借助request.session的方法set_expiry()。 set_expiry(VALUE)设置: 1.如果是个整数,表示帐号的存活时间。request.session.set_expiry(300) 2.VALUE还可以是个datetime or timedelta。 3.如果是0,则会在关闭浏览器时失效。 4.可以为None。 只需要在登录页面上加入一个checkbox,再在views里进行判断就Ok了。
django提供的forms可以很方便的实现创建表单,表单内容的过滤,提交。但是表单模板返回的固定代码。 开始学习的翻译文档,forms自定义表单模板的成分很少,特别是errors的介绍。查资料没找到。又看官网,找到了(还是官网好哇~)。 复制代码上来,做分享。 <div> <label for="id_username">用户名:</label> <div> {{ form.username }} {% if form.username.errors %} <span> {% for error in form.username.errors %} {{ error|escape }} {% endfor %} </span> {% else %} <p>用户名中只能包含字母、数字、下划线和汉字。<p> {% endif %} </div> </div>
记录几个常用的过滤器: {{my_text|escape|linebreaks }} escape 按照以下的规则,转义一个HTML字符串:
- "&" to "&"
- < to "<"
- > to ">"
- '"' (double quote) to '"'
用django写了一个站内用户之间发送消息的应用,应用虽小但五脏俱全。写完后总结了一下: 1、建立messages应用。 2、models设计:设置了7个字段,标题,内容,时间,发消息送人,接受人消息,发送消息是否删除,接受消息是否删除。 3、admin.py简单设置了一下,加入群发的功能。 4、forms实现:接收消息的人的验证,标题的验证,数据的保存。 5、url.py设置:6个,发送的消息,接收的消息,发送消息,查看消息,删除消息,回复消息。 6、views.py实现:每个URL对应一个def,这里在官网看到一个用法,翻译的2.0文档没看到(没仔细看), from django.contrib.auth.decorators import login_required @login_required(login_url='/users/login/')#在每个def上面加上这么一句就OK了,login_url指定了跳转到你设置的登录URL。我的登录URL让我改了。 用户注册用户名需要过滤。记录
在上一篇中django contrib.admin使用记录一 中ArticlesAdmin,类添加
#用于显示admin管理界面的change中显示的属性。
list_display = ('title','user','ip','datetime')
#可以在change页面中直接点击title和user进行编辑
list_display_links = ('title','user')
#用那个属性对所有对象进行筛选,可在右边显示
list_filter = ('user',)
#按哪个属性搜索
search_fields = ('title',)
更多属性参考django官网‘The Django admin site’。
在models.py文件建立Articles类的内部类:
#内部类,用于指定Articles数据模型的一些元数据
class Meta:
#指定Articles在后台显示的名称
verbose_name_plural = '文章'
这仅仅是将一个小应用在admin管理页中的显示,admin高级内容先不研究了。等把权限和组还有分类设定好在说。
安装管理应用程序。在你的 INSTALLED_APPS 的设置中加入 "django.contrib.admin" 。 如果你是一直照步骤做下来的,请确认 "django.contrib.sessions" , "django.contrib.auth" , 和 "django.contrib.contenttypes" 前面的注释已去掉,因为管理程序需要它们。请同时去掉所有 MIDDLEWARE_CLASSES 设置行中的注释,并清除 TEMPLATE_CONTEXT_PROCESSOR 设置,以便它可以重新使用缺省值。 运行 python manage.py syncdb 。这一步将生成管理界面使用的额外数据库表。 修改url.py文件,修改三个地方。 在应用目录下,新建文件admin.py,写django代码:
#-*- coding:utf-8 -*-
from django.contrib import admin
from plant.articles.models import Articles
class ArticlesAdmin(admin.ModelAdmin):
pass
admin.site.register(Articles, ArticlesAdmin)
Articles为应用,这样你就可以在admin管理界面看到了
使用步骤: 1、在settings文件中的INSTALLED_APPS中加入'django.contrib,comments',。 2、执行命令,manage.py syncdb,创建数据表。 3、urls.py中 (r'^comments/',include('django.contrib.comments.urls')),。 4、编辑templates文档。
{% load comments %}
{% get_comment_list for articles.Articles a.id as comment_list %}
{% for comment in comment_list %}
评论人:{{comment.user.username}}{{comment.user.email}}|评论时间:{{comment.submit_date|date:"Y-m-d H:i"}}
|ip地址:{{comment.ip_address}}
{{comment.comment}}
{% endfor %}
{% get_comment_form for articles.Articles a.id as form %}
{% load comments %} 是所有要用到comments组件的模板都需要加进入标签。
a.id是上面文章的id,没有规范写。
<input type="hidden" name="next" value="/articles/36/" />实现评论成功后的跳转,功能还没实现。
还有一个功能没实现,就是非登陆用户的评论限制。
具体参考官网“the built-in comment models”
这两个的安装都是直接命令安装, apt-get install libapache2-mod-wsgi 查看mod_wsgi是否安装成功,找文件/usr/lib/apache2/modules/mod_wsgi.so 编辑/etc/apache2/httpd.conf,加入: # LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so WSGIScriptAlias / "/data/web/test/mysite/apache/django.wsgi" <Directory "/data/web/mysite"> Order Deny,Allow Allow from all </Directory> #那句不用写,加入以后会提示“已经载入mod_wsgi” [warn] module wsgi_module is already loaded, skipping 以后还要再配置一次,现在做个测试。主要参照官网。 Alias /robots.txt /usr/local/wsgi/static/robots.txt Alias /favicon.ico /usr/local/wsgi/static/favicon.ico AliasMatch ^/([^/]*\.css) /usr/local/wsgi/static/styles/$1 Alias /media/ /usr/local/wsgi/media/ Alias /static/ /usr/local/wsgi/static/ <Directory /usr/local/wsgi/static> Order deny,allow Allow from all </Directory> <Directory /usr/local/wsgi/media> Order deny,allow Allow from all </Directory> WSGIScriptAlias / /usr/local/wsgi/scripts/django.wsgi <Directory /usr/local/wsgi/scripts> Order allow,deny Allow from all </Directory> /data/web/test/mysite/apache/django.wsgi
# -*- coding: utf-8 -*-
import os
import sys
apache_configuration = os.path.dirname(__file__)
project = os.path.dirname(apache_configuration)
workspace = os.path.dirname(project)
sys.path.append(workspace)
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
import django.core.handlers.wsgi
application = django.core.handlers.wsgi.WSGIHandler()
apache的日志文件存放在:/var/log/apache2/目录下。