用户注册需要邮箱的验证,找回密码需要邮箱。我选择用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)
非常简单。
Read more...
Archive for web
django用户登录,是否记住用户登录状态的session实现
用户登录的时候,选择是否记住登录状态,就是所谓的自动登录。又是从官网上找到了,兴奋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了。
Read more...
django forms的模板自定义实现
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>
Read more...
django 模板系统学习之过滤器记录
记录几个常用的过滤器:
{{my_text|escape|linebreaks }}
escape
按照以下的规则,转义一个HTML字符串:
Read more...
- "&" to "&"
- < to "<"
- > to ">"
- '"' (double quote) to '"'
django 用户发站内消息应用实现
用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让我改了。
用户注册用户名需要过滤。记录
Read more...
django contrib.admin使用记录2
在上一篇中django contrib.admin使用记录一 中ArticlesAdmin,类添加
Read more...
#用于显示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高级内容先不研究了。等把权限和组还有分类设定好在说。
django contrib.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代码:
Read more...
#-*- 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管理界面看到了
Django的comments框架使用
使用步骤:
1、在settings文件中的INSTALLED_APPS中加入'django.contrib,comments',。
2、执行命令,manage.py syncdb,创建数据表。
3、urls.py中 (r'^comments/',include('django.contrib.comments.urls')),。
4、编辑templates文档。
Read more...
{% 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”
<table>
<tr>
<th>作者:{{a.user.username}}</th><th>时间:{{a.datetime|date:'Y-m-d H:i'}}</th><th>IP:{{a.ip}}</th></tr>
<tr><td><b>{{a.title}}</b></td></tr>
<tr><td>{{a.content}}</td></tr>
</table>
{% load comments %}
{% get_comment_list for articles.Articles a.id as comment_list %}
{% for comment in comment_list %}
<div>
<p>评论人:<b>{{comment.user.username}}{{comment.user.email}}</b>|评论时间:{{comment.submit_date|date:"Y-m-d H:i"}}|ip地址:{{comment.ip_address}}</p>
{{comment.comment}}
</div>
{% endfor %}
{% get_comment_form for articles.Articles a.id as form %}
<form action={% comment_form_target %} method="post">
{% csrf_token %}{{form.object_pk}}{{form.content_type}}{{form.timestamp}}{{form.security_hash}}
<p><label for="id_comment">评论:</label></p>
<p><textarea name="comment"></textarea></p>
<input type="hidden" name="next" value="/articles/36/" />
<p><input name="post" value="发表" type="submit" /></p>
</form>
Ubuntu安装配置Apache和mod_wsgi
这两个的安装都是直接命令安装,
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
Read more...
# -*- 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/目录下。