Archive for web

用户注册需要邮箱的验证,找回密码需要邮箱。我选择用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) 非常简单。

Continue

用户登录的时候,选择是否记住登录状态,就是所谓的自动登录。又是从官网上找到了,兴奋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了。



Continue

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>

Continue

  记录几个常用的过滤器: {{my_text|escape|linebreaks }} escape 按照以下的规则,转义一个HTML字符串:

  • "&" to "&amp;"
  • < to "&lt;"
  • > to "&gt;"
  • '"' (double quote) to '&quot;'
"'" (single quote) to '&#39;' linebreaks 把换行符转换成<p>和<br />标签。 addslashes 给敏感字符添加斜线(转义). 举例,要将一个字符串传递给 JavaScript 时.添加反斜杠到任何反斜杠、单引号或者双引号前面。 {{ "ABCD"|linebreaksbr }} 用新行用<br /> 标记包裹,这个也不会识别html标签只会实现换行。  

Continue

用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让我改了。 用户注册用户名需要过滤。记录

Continue

在上一篇中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高级内容先不研究了。等把权限和组还有分类设定好在说。

Continue

安装管理应用程序。在你的 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管理界面看到了

Continue

  使用步骤: 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 %}
{% csrf_token %}{{form.object_pk}}{{form.content_type}}{{form.timestamp}}{{form.security_hash}}

{% 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>

Continue

这两个的安装都是直接命令安装, 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/目录下。

Continue

CSRF verification failed. Request aborted.

Help Reason given for failure: CSRF token missing or incorrect. 解决方案: 在Settings里的MIDDLEWARE_CLASSES增加配置: 'django.middleware.csrf.CsrfViewMiddleware', 'django.middleware.csrf.CsrfResponseMiddleware',

Continue