阿小信大人的头像
做你说过的,说你能做的 阿小信大人

极客大挑战平台开发笔记2014-09-02 05:23

扩展User,最好不要用继承的方式,因为request只能传递他自带的User类用户,django很多自带(如Admin)或者其它第三方库都依赖User,如果你继承它的话,你自己的model里将看不到User model的踪迹,这些库都无法使用

解决办法:

官方文档:

settings添加 AUTH_PROFILE_MODULE = 'appname.profilename'

扩展类仍然继承models.Model

添加user = OneToOneField(User)

遇到点问题没能解决-。-使用外键关联的User

syncdb时mongodb报错:

AutoField (default primary key) values must be strings representing an ObjectId on MongoDB (got u'1' instead). Please make sure your SITE_ID contains a valid ObjectId string.

解决办法:http://django-mongodb.org/troubleshooting.html

在INSTALLED_APPS中添加'django_mongodb_engine'

./manage.py syncdb
./manage.py tellsiteid
The default site's ID is u'505c7442e206a5126bb3498a'. To use the sites framework, add this line to settings.py:
SITE_ID=u'505c7442e206a5126bb3498a'

context_instance:解决csrf403

必须要在setting中的MIDDLEWARE_CLASSES添加django.middleware.csrf.CsrfViewMiddleware

表单加入{% csrf_token %}

view中使用context_instance

from django.template import RequestContext
return render_to_response('page.html', {'key':value}, context_instance=RequestContext(request))

$("#id_password").attr("type","password");Chrome里面没作用-。-~type属性为只读属性

解决办法(直接替换全部):

src = '<p><label for="id_password">登录密码:</label> <input id="id_password" type="password" name="password" maxlength="16" /></p>'
$(function(){
$pw = $('#id_password');
$src = $pw.parent().html(src)
$pw.remove()
});

在模板中使用request对象:

在视图里必须返回RequestContext对象(django.template.RequestContext

c = Context(request, {})改为c = RequestContext(request, {})

或者

return render_to_response('html', {}) 改为return render_to_response('html', {}, context_instance=RequestContext(request))

然后在settings添加

TEMPLATE_CONTEXT_PROCESSORS = ( 
    "django.core.context_processors.auth", 
    "django.core.context_processors.debug", 
    "django.core.context_processors.i18n", 
    "django.core.context_processors.media", 
    "django.core.context_processors.request" 
)

记住登录前用户所在页面位置可把登录前的链接放在session中,登录后从session取出之前的链接跳转

def team_login(request):
    form = LoginForm()
    if request.method == 'GET':
        request.session['login_from'] = request.META.get('HTTP_REFERER', '/')
    elif request.method == 'POST':
        form = LoginForm(request.POST)
        if form.is_valid():
            cd = form.cleaned_data
            user = authenticate(username=cd['team_name'], password=cd['password'])
            if user is not None and user.is_active:
                login(request, user)
                return HttpResponseRedirect(request.session['login_from'])
            else:
                messages.add_message(request, messages.INFO, u'用户名或密码错误')
                return render_to_response('login.html', {'form':form,}, context_instance=RequestContext(request))

图片上传要注意的问题:

必须要有upload_to参数,会将你选择的图片上传到赋值目录,最前面不能有‘/’,不然会报权限错误,应写为'a/b'而不是'/a/b'

必须设置settings中的MEDIA_ROOT,到时候上传文件会放到MEDIA_ROOT/a/b/upload.datas

MEDIA_URL为访问路径,http://host/MEDIA_URL/a/b/.,不填则为MEDIA_ROOT

部署时

from django.conf.urls.defaults import patterns, include, url 改为from django.conf.urls.defaults import * 自动处理404 500

部署到apache步骤:

1 配置setting.py

TEMPLATE_DIRS = (
"/path/to/project"
)#不然会提示找不到templates下的html

2 把mod_wsgi.so放到apache的models目录中

3 在工程下新建一个django.wsgi文件,内容为:

import os
import sys
import django.core.handlers.wsgi
sys.path.append(r'/path/to/project')
os.environ['DJANGO_SETTINGS_MODULE'] = 'project.settings'
application = django.core.handlers.wsgi.WSGIHandler()

4 修改apache/conf/httpd.conf文件(修改之前先还是复制个副本为好)

在LoadModule区域添加:LoadModule wsgi_module modules/mod_wsgi.so

在Derectory区域添加:

<Directory "/path/to/project">
Order Deny,Allow
Allow from all
</Directory>
WSGIScriptAlias / "/path/to/project/django.wsgi"

解析静态文件,添加:

Alias /static/ "/path/to/static/"
<Directory "/path/to/static">
Order Deny,Allow
Allow from all
</Directory>

admin的css没法加载可以把admin的静态文件考到static下,或者再添加个Alias

如果您觉得从我的分享中得到了帮助,并且希望我的博客持续发展下去,请点击支付宝捐赠,谢谢!

若非特别声明,文章均为阿小信的个人笔记,转载请注明出处。文章如有侵权内容,请联系我,我会及时删除。

#Python#   #django 阅读[4137] 评论[0]

你可能也感兴趣的文章推荐

本文最近访客

网友40.*.*.73[美国]2022-09-25 06:25
网友185.*.*.39[火星]2022-09-25 06:24
网友216.*.*.226[Seattle]2022-09-25 06:21
网友185.*.*.23[火星]2022-09-25 06:19

发表评论