Archive for web-2

上传到Ubuntu服务器后错误百出,报错Data truncated for column 'title' at row 1, Google搜索发现是编码不统一的问题。 查看数据库编码的方法: show variables like 'character%'; 修改/etc/mysql/my.cnf文件 找到客户端配置[client] 在下面添加 default-character-set=utf8 默认字符集为utf8 在找到[mysqld] 添加 default-character-set=utf8 默认字符集为utf8 init_connect='SET NAMES utf8' (设定连接mysql数据库时使用utf8编码,以让mysql数据库为utf8运行) 重启mysql服务:service mysql restart 再查看发现成为utf8了。 drop掉原来建立的数据库,新建一个utf8的: CREATE DATABASE ms_db CHARACTER SET utf8 ; 前台测试,不再报错。

Continue

ExtractionError: Can't extract file(s) to egg cache The following error occurred while trying to extract file(s) to the Python egg cache: [Errno 13] Permission denied: '/var/www/.python-eggs' The Python egg cache directory is currently set to: /var/www/.python-eggs Perhaps your account does not have write access to this directory? You can change the cache directory by setting the PYTHON_EGG_CACHE environment variable to point to an accessible directory. 解决办法: mkdir /var/www/.python-eggs chmod -R 777 /tmp/.python-eggs 设置PYTHON_EGG_CACHE环境变量 $ SetEnv PYTHON_EGG_CACHE /tmp/aaa/ ##(setenv是在cshell中用的,在bshell中用的是 export 不同的SHELL设置变量的方法很不一致: csh : set、setenv bash : set、export ksh : set、export或直接赋值 vim /etc/profile export PYTHON_EGG_CACHE=/tmp/.python-eggs source /etc/profile export PYTHON_EGG_CACHE=/tmp/.python-eggs env |grep egg chmod -R 777 /tmp/.python-eggs or # vi /root/.bashrc export PYTHON_EGG_CACHE=/tmp/.python-eggs ) 目录权限注意要是apache用户,或者简单点就777

Continue

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