`
hadoop_jun_xj
  • 浏览: 8890 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

django-note

阅读更多
Python note:
>>> v = ('a', 'b', 'e')
>>> (x, y, z) = v

===loop:
for i in range(10):
    print 'xjbean'

lambda 函数是一个可以接收任意多个参数(包括可选参数)并且返回单个表达式值的函数。
>>> g = lambda x: x*2  
>>> g(3)
6

>>> (lambda x: x*2)(3) 
6

lambda 函数是风格问题。不一定非要使用它们,任何能够使用它们的地方,都可以定义一个分离的普通的函数,用它来替换.
我将它们用在需要封装特殊的,非重用的代码上,用许多小的一行函数不会弄乱我的代码。

给模块起别名:
import ftplib as ftp

Python脚本和模块都是一个以.py结束的文件,那程序是如何判断一个.py文件是作为脚本还是模块呢?
关键是一个名为__name__的变量,如果它的值是__main__,则不能作为模块,只能作为脚本直接运行

__init__.py: 包的初始化文件

import sys

import会完成以下三个操作:
    创建新的名称空间(namespace),该名称空间中拥有输入模块中定义的所有对象;
    执行模块中的代码;
    创建该名称空间的变量名

在目录下名hello.py文件里定义一个Dog class, 然后进入python, from hello import hello

d = Dog  --执行后,访问d.name将显示name未定义

===pdb调试
在py文件里加入如下语句:
import pdb
pdb.set_trace()


n:next
q:quit
r:return
c:continue
b:break
h:help
s:step

运行系统程序

>>>import os
>>>os.system('ls')            #用os.system()可执行系统命令
>>>exec "os.system('ls')"     #用exec可执行字符串中的命令,两个命令的效果一样。

通过getattr可以得到一个在运行时才知道具体函数名的对象的引用,能增强我们程序的灵活性。

>>> li=['a','b']
>>> getattr(li,'append')
>>> getattr(li,'append')('c')          #相当于li.append('c')
>>> li

hasattr用于确定一个对象是否具有某个属性。

语法:
 hasattr(object, name) -> bool
判断object中是否有name属性,返回一个布尔值。

以下划线开头的标识符是有特殊意义的。以单下划线开头(_foo)的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用“from xxx import *”而导入;以双下划线开头的(__foo)代表类的私有成员;以双下划线开头和结尾的(__foo__)代表python里特殊方法专用的标识,如__init__()代表类的构造函数。


python字符串操作:
len(str)
cmp(str1,str2) --比较字符串

================================================================================
Djaogo note:

change server port:
    python manage.py runserver 8080

python manage.py runserver 0.0.0.0:8000   --share with other people

为什么我们运行python manage.py shell而不是python?
python manage.py shell.

manage.py shell命令有一个重要的不同: 在启动解释器之前,它告诉Django使用
哪个设置文件。Django搜索DJANGO_SETTINGS_MODULE环境变
量,它被设置在settings.py中。例如,假设mysite在你的Python搜索路径中,那么
DJANGO_SETTINGS_MODULE应该被设置为:’mysite.settings’
    运行命令:python manage.py shell,它将自动帮你处理DJANGO_SETTINGS_MODULE


eclipse python plug-in:
http://pydev.org/updates
svn plugin
 http://download.eclipse.org/technology/subversive/0.7/update-site/

Django quick start:
1. create a project
     django-admin.py startproject mysite
        --manage.py
        --settings.py
        --urls.py
2. ./manage.py runserver

3. ./manage.py startapp blog  #create app
        --__init__.py
        --models.py
        --views.py
       config settings.py, find INSTALLED_APPS and add:
            'mysite.blog',

4. Design model
    from django.db import models
    class BlogPost(models.Model):
        ...

5. Set up DB
    in settings.py file: #(need to create a DB schame first--username/pwd)
        DATABASE_ENGINE="mysql"
        DATABASE_NAME="djangodb"
        DATABASE_HOST="localhost"
        DATABASE_USER="root"
        DATABASE_PASSWORD="root"

6. create tables
    ./manage.py syncdb  # when add new models, we need to run this command again

7. Set admin app (optinal)
    1) open settings.py 

8. create admin.py module in your app, add statement like:
    admin.site.register(Diary)

===============================================================================>
Mysql setup:
数据库的关键信息都写在settings.py中,这样做是非常不安全的。现在可以在settings.py里面使用DATABASE项代替以上的配置项,username和password可以写在配置文件中。下面是把username和password放到MySQL数据库的配置文件中,由DATABASE项读取的示例:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'OPTIONS': {
            'read_default_file': '/etc/mysql/my.cnf',
        },
    }
}

# my.cnf
[client]
database = xxx
user = xxx
password = xxxxxx
default-character-set = utf8

也可以在DATABASES中加入NAME来指定数据库名,client中去除database选项,HOST和PORT这些也都可以写在my.cnf文件中。   

install mysql python driver:

summary steps:
    $ tar xfz MySQL-python-1.2.1.tar.gz
    $ cd MySQL-python-1.2.1
    $ # edit site.cfg if necessary
    $ python setup.py build
    $ sudo python setup.py install # or su first

required:
    1)install mysql
    2)install python-setuptools
    3)install libmysqlclient-dev   --to solve "mysql_config" not found

verify mysql driver:
>>> import MySQLdb
>>> MySQLdb.apilevel
'2.0'

DATABASES = {
 13     'default': {
 14         'ENGINE': 'django.db.backends.mysql', # Add 'postgresql_psycopg2', 'postgresql', 'mysql', 'sqlite3' or 'oracle'.
 15         'NAME': 'puer',                      # Or path to database file if using sqlite3.
 16         'USER': 'root',                      # Not used with sqlite3.
 17         'PASSWORD': 'root',                  # Not used with sqlite3.
 18         'HOST': 'localhost',                      # Set to empty string for localhost. Not used with sqlite3.
 19         'PORT': '3306',                      # Set to empty string for default. Not used with sqlite3.
 20     }
 21 }


Python & Django learning note:

for p in publisher_list:
    print '(%s %s %s %s %s)' % (p.name, p.address, p.city, p.country, p.website)


or can do by following:
    sudo easy_install MySQL-python
===============================================================================>
install apache:
sudo apt-get install apache2 libapache2-mod-python


===============================================================================>from-import语法
from module import 语法:
Python 中的 from module import * 像 Java 中的 import module.* ;
Python 中的 import module 像 Java 中的 import module 。

>>> import types
>>> types.FunctionType             1
<type 'function'>

>>> FunctionType                   2
Traceback (innermost last):
  File "<interactive input>", line 1, in ?
NameError: There is no variable named 'FunctionType'

>>> from types import FunctionType 3

>>> FunctionType                   4
<type 'function'>

解释:
1 	types 模块不包含方法,只是表示每种 Python 对象类型的属性。注意这个属性必需用模块名 types 进行限定。
2 	FunctionType 本身没有被定义在当前名字空间中;它只存在于 types 的上下文环境中。
3 	这个语法从 types 模块中直接将 FunctionType 属性导入到局部名字空间中。
4 	现在 FunctionType 可以直接使用,与 types 无关了。 

什么时候你应该使用 from module import?
    如果你要经常存取模块的属性和方法,且不想一遍遍地敲入模块名,使用 from module import。
    如果你想要有选择地导入某些属性和方法,而不想要其它的,使用 from module import。
    如果模块包含的属性和方法与你的某个模块同名,你必须使用 import module 来避免名字冲突。

另外,它只是风格问题,你会看到用两种方式编写的Python代码。
尽量少用 from module import * ,因为判定一个特殊的函数或属性是从哪来的有些困难,并且会造成调试和重构都更困难   ---!!!

===============================================================================>python False
空列表[]
空元组()
空字典{}
空字符串''
零值0
特殊对象None
对象False

除以上几点所有东西都视为True


===============================================================================>CSRF orbidden (403) 错误
CSRF verification failed. Request aborted.

Solved:
1. 在表单里加上{% csrf_token %}就行了。

2. 在Settings里的MIDDLEWARE_CLASSES增加配置:

    'django.middleware.csrf.CsrfViewMiddleware',
    'django.middleware.csrf.CsrfResponseMiddleware',


sudo apt-get install python-pip

pip is a tool bundled with virtualenv to install Python packages.
( 一个与virtualenv绑定的工具,用于安装python相关的包(依赖库))
You should become very familiar with this tool.
it is used in Pinax extensively to handle dependencies.


pip:一个安装和管理python包的工具,It’s a replacement for easy_install.
The recommended way to use pip is within virtualenv, since every virtualenv has pip 
installed in it automatically. This does not require root access or modify your system Python installation

=============================Pinax install and quick start:
====Install Pinax
Prerequisites¶
    python2.4+
    virtualenv 1.4.7+
    PIL --

before installing, you need to install virtualenv first http://pypi.python.org/pypi/virtualenv
install:
    $ virtualenv mysite-env
    $ source mysite-env/bin/activate
    (mysite-env)$ pip install Pinax

====Create a project and install default project base --Zero :
(mysite-env)$ pinax-admin setup_project mysite
    --pinax comes with many different project bases. The default project based is what we call layer zero. 

===list the existing projects:
pinax-admin setup_project -l

===Specifying a different project base:
(mysite-env)$ pinax-admin setup_project -b basic mysite

===run a project:
(mysite-env)$ python manage.py syncdb
(mysite-env)$ python manage.py runserver

=====solve error: Django manage.py syncdb throwing No module named MySQLdb 
bin/easy_install mysql-python  

====solve no module named metron  ****
(mysite-env)$ bin/python mysite/manage.py syncdb
(mysite-env)$ bin/python mysite/manage.py runserver
superuser: junn/junn

pinax module is in dir:
    /usr/local/lib/python2.6/dist-packages/pinax/

开发自己的应用:
在YOUR-PROJECT-NAME/apps目录下,把自己原来开发的django应用copy进来吧,也许还需要把你的template copy到templates目录下,
执行过python manage.py syncdb之后,就可以使用python manage.py runserver 0.0.0.0:80来运行了,

pinax具有以下特点:

    支持openid;
    支持email验证;
    密码管理;
    站点声明;
    用户短消息;
    朋友邀请,包括站内邀请和站外邀请;
    一个基本的twitter应用集成;
    群组功能,tribes
    project协同工作;
    讨论;
    wiki功能;
    blog功能;
    书签功能;
    tag功能;
    contact import;
    投票系统;
    图片管理。

《简明Python教程》和《Dive Into Python》


===================python项目包管理
服务器环境与本地开发环境不是完全一样, 在本地开发过程中安装一些python django 的第三方包如:
PIL ,django-voting,debug-toolbar... 一大推。难道要在服务器上从来再pip install 一次吗?
pip 提供了一个人性化的功能,导出现项目所有的依赖包:
pip freeze >myenv.txt


Brlapi==0.5.4
CouchDB==0.6
Django==1.2.1
Fabric==0.9.2
GnuPGInterface==0.3.2
Mako==0.2.5
MySQL-python==1.2.2
PAM==0.4.2
PIL==1.1.7
Pinax==0.9a1
SQLObject==0.13.0
Scrapy==0.10
Twisted==10.0.0
Twisted-Conch==10.0.0
Twisted-Core==10.0.0

==myenv.txt 这个文件 叫需求文件

上传到服务器上 然后  pip install -E  site_env myevn.txt  就可以下载所有依赖的包,并且产生 相应的 virtualenv. 

pinax交流:
alexliyu2012@gmail.com  


==================pinax目录结构:
1、mysite是项目目录,这里面存放的是这个新建项目的相关配置文件以及模板,而mysite-env才是pinax的目录。因此,做具体的二次开发时候,实际上很多的情况我们所需要修改的文件都在mysite-env/lib/pythonxx/site-packages/pinax目录下,而并不是您的项目目录,当然您也可以重载这些。

2、pinax最新的是0.9x版本,默认的语言包文件并没有中文,我们需要自己来make中文语言包。至于怎么生成中文语言配置文件django.po以及怎么编译成django.mo请直接百度或者google参考django相关教程。我这里只是需要提醒大家,在翻译pinax语言包的时候需要注意:您除了要翻译您的项目下的django.po外,pinax目录内的django.po也必须要翻译,否则你就要郁闷为啥显示的仍旧是英文呢?

3、关于pinax的模板机制。您使用pinax生成的项目目录中的模板并不是全部的模板,其中很大一部分模板并不存在。
根据django的模板机制,当项目模板目录找不到请求的模板时,会自动去pinax目录寻找。
因此,在修改模板的时候请自己在项目目录下补全所缺少的模板,或者直接去pinax目录修改相关模板

4、关于中文,pinax毕竟是老外的系统,对于中文的支持并不算是很好。所以很多的应用中文的地方,需要各位自行的进行修改,比如wiki、tag之类的,默认的url规则并不支持中文的slug,所以一定要进行修改。而修改的地方也在pinax目录,找到相应的app目录,然后修改setting。

5、二次开发建议,pinax项目的初衷或者说思路就是构建一个开源的基于django app的sns应用框架,或者说应用脚手架。因此,在建立项目的时候建议使用pinax-admin setup_project -b social mysite2 类似的,生成social项目。因为本身social项目的名称应该就是complete project,他已经最大包含了pinax的app,我们从这个项目入手会省去很多的工作。

6、关于wiki,很多朋友都问我pinax说支持wiki,可是看完了官方文档后仍旧找不到wiki在哪里,到底怎么使用wiki?其实,pinax使用的wiki是名为wakawak的django app,在social项目中已经包含了。我们只需要在项目的urls.py中给它添加相应的url规则并修改base模板,添加menu就可以了。具体修改urls.py,只需要在urlpatterns中添加, url(r"^wiki/", include("wakawaka.urls")),即可。当然,这里会使用它默认的url规则:WIKI_SLUG = r'((([A-Z]+[a-z]+){2,})(/([A-Z]+[a-z]+){2,})*)',只支持类似TryIt之类的slug,所以请根据实际需要去pinax目录下wakawak app目录中修改setting。

7、还有一些朋友遇到了比如添加了中文包了,也修改了setting文件,但是仍旧不显示中文的情况。这时我建议各位遇到此类问题的朋友先要确保您的配置文件有正确的书写,比如LANGUAGE_CODE = "zh_CN",就千万别写成LANGUAGE_CODE = "zh-CN",否则那就郁闷了。如果确认后仍旧出现问题,则不妨在setting中这样来写

ugettext = lambda s: s

LANGUAGES = [

    ("zh_CN", u"Chinese"),

    ("en", u"English")

]

然后重启开发服务器,选择English,然后在切换回Chinese,这时应该会解决仍旧显示中文的问题。

 
8、如何部署二次开发的pinax,使用buildout命令,生成发行包,然后通过发行包来进行部署。


===================制作app的工作流程
    1.设计models,编辑 models.py,修改settings安装app,syncdb确保设计没有语法错误。
    2.编辑 admin.py,进入admin 测试 models。
    3.规划 url,编辑 urls.py,将所有 urls 映射到不存在的 views。
    4.创建 views,所有 views 的内容都使用临时的HttpResponse。
    5.制作app的首页(逻辑顶层)的模板,模板内制作指向各个view 的 url。实验。
    6.按照逻辑顺序一个一个地填充各个 view 的逻辑、模板。
    7.在 view 的逻辑需要的时候设计 forms,修改 forms.py。

========================================Django Projects (项目)推荐的布局
example.com/
   README
   settings.py
   urls.py
   docs/
       This will hold the documentation for your project
   static/
       -In production this will be the root of your MEDIA_URL
       css/
       js/
       images/
   tests/
       - Project level tests (Each app should also have tests)
   uploads/
       - content imgs, etc
   templates/
       - This area is used to override templates from your reusable apps
       flatpages/
       comments/
       example/
       app1/
       app2/

=======================================virtualenv虚拟环境
Virtualenv 对于 Python 项目来说是必须的. 它提供一个隔离不同 Python 运行环境的方法. 典型的, 我们在 /opt/webapps/<site_name> 部署生产环境站点, 在 ~/webapps/<site_name> 目录部署我们的开发环境站点. 每个 project 有它自己的 virtualenv, virtualenv 还充当 project 所有相关代码的根目录. 我们使用 pip 为 virtualenv 添加必要的包.


在生产环境部署django应用:
cd /opt/webapps
virtualenv mysite.com
cd mysite.com
pip install -E . -r path/to/requirements.txt
source bin/activate

===========================================如何用eclipse+pydev调试django应用

2010-03-14 13:28

1、如何才能通过pydev启动django应用,并且设置断点调试呢?

参考pydev creator的文章《Configuring pydev to work with django》

总结一下就是:django应用的runserver命令会启动两个进程,这是实现auto reload的关键,也是无法设置断点、向cmd打印log的根源,所以runserver加入--noreload参数即可。

不过,问题又来了。这样做导致auto reload功能失去,每次修改源码都要重启服务器。

2、如何保证auto reload的前提下用pydev调试django应用呢?

参考一位老兄的文章《How to debug django web application with autoreload》

总结一下,就是用remote debugger,并且在manage.py中增加一些代码。

然后选择右上角的open Perspective选择other->Pydev

========================================配置Eclipse下的Django开发环境
安装方法是:
help->softupdate->addsite填入: http://sourceforge.net/projects/pydev/ 
也可下载aptana IDE

1.建立PyDev Project

Eclipse IDE-》File-》New-》Other-》Pydev-》选择Pydev Project-》起一个项目的名称(例如demo)-》选择路径,如d:\workspace-》选择适合你的Python版本(我的是2.6)-》将下面的勾去掉,不要建立src文件-》Finish

2.把生成的Django项目目录拷贝到Eclipse刚刚建立的项目下的目录里。回到刚才的Elicpse IDE-》在PyDev Package视图中右键单击新建的项目,从弹出的菜单中选择“Refresh”,即可看到Django的项目工程。添加、删除文件和目录的操作都可以通过右键菜单来完成

3.右键单击PyDev项目-》properties-》选择PyDev-PYTHONPATH-》add Source folder 把你复制进去的项目添加—>确定

4. 对Pydev项目进行配置,配置这样就可以直接和运行tomcat一样启动:选择Pydev的项目名称-》Run菜单-run Configurations-》Python Run-》右键New-》在Main面板中写入项目名称,通过Browse载入项目名称和Main Module,Main Module选择manage.py-》在Augement面板中,argument必须是 runserver --noreload,下面的working directory加入你的base directory。

这样启动时就可以直接点run来运行了

=====================================my Eclipse virtualenv setup:
1. create a new Pydev project named mysite(最好是用mysite名字,因settings配置里默认用该名)
2. import filesystem from /home/junn/Release/pinax/mysite/ into the new mysite  --该pinax/mysite由安装pinax时产生,这里主要是要其产生的django标准目录结构
3. Choose python interpreter: /home/junn/Release/pinax/bin/python
4. 在PYTHONPATH选项里,添加Source Folder为project根
5. PYTHONPATH选项里,添加External Libraries:  (不是必须的)
    /home/junn/Release/pinax/lib
    /home/junn/Release/pinax/include  
6. Run:
    new a python Run-->choose project-->Main Module-->add program arguments

The key in all steps: 
1. Choose python interpreter: /home/junn/Release/pinax/bin/python (由该设置会自动读取相关lib/include)
2. new Pydev project 命名为: mysite
3. import /home/junn/Release/pinax/mysite/ into the new mysite, not from /home/junn/Release/pinax
3. Run的设置: 
  
==============================Pinax中文化步骤:
1. use translation strings in Python code and templates
    

2.create language files
    mysite$ django-admin.py makemessages -l zh_CN    --if error, create locale dir
    mysite$ mkdir locale
    mysite$ django-admin.py makemessages -l zh_CN -v2

3. translate the file: mysite/locale/zh_CN/LC_MESSAGES/django.po  
    #: forms.py:25
    msgid "There is already this book in the library."
    msgstr "库里已有该书."

    #: models.py:16 
    msgid "title" 
    msgstr "标题"

    #: models.py:17 
    msgid "publisher" 
    msgstr "出版社"

4. Compiling the language files
    mysite$ django-admin.py compilemessages

    Remember to restart the development server every time you compile the messages, so do it now

5. change settings
open the settings.py file and make sure you have the following settings:
    USE_I18N = True
    ...
    ugettext = lambda s: s
    LANGUAGES = (
            ('en', u'English'),
            ('zh', u'Chinese'),
)


注意:以下(eclipse)工程結构中,针对项目properties-->PYTHONPATH-->Add source folder 时,应添加/mysite/apps, 而不是添加/mysite/apps/about/, /mysite/apps/diary等子目录。否则,会报找不到相应model错误
mysite/
    apps/
        about/
        diary/
        profiles/
    templates/

===========================Pinax 已有设计:
profile<-->user :  通过user_id(PK, auto生成)产生关联


=====================django model
Diary:
    property = models.ForeignKey(DiaryProperty)

    --关联关系需在关联的一端维护即可,如上不需要在DiaryProperty里也添加对Diary对象的引用。
        由DiaryProperty对象获取Diary对象可用: property.diary_set.all()  --其中diary_set属性为Django框架自动添加

ForeignKey(one-to-many), ManyToManyField and OneToOneField require the first argument to be a model class, 
so use the verbose_name keyword argument:
    poll = models.ForeignKey(Poll, verbose_name="the related poll")
    sites = models.ManyToManyField(Site, verbose_name="list of sites")
    place = models.OneToOneField(Place, verbose_name="related place")
    ---verbose_name作为描述说明字串

Many-to-one relationships:
    class Manufacturer(models.Model):
        # ...

    class Car(models.Model):
        manufacturer = models.ForeignKey(Manufacturer)
一个制造商会造多辆汽车,但一辆汽车只会有一个制造商,典型一对多关系,所以用ForeignKey


===========更新模型步骤(开发环境):
1. add properties in model
2. > python manage.py sqlall diary   --查看CREATE TABLE语句
3. 访问DB,添加新字段: alter table 语句 --可选用 manage.py dbshell直接调用DB客户端
4. > python manage.py shell --由此导入model和选中表单(Diary.objects.all())验证新字段是否被添加

在产品服务器上:
1.启动DB交互界面
2.执行开发环境中的 step 3: alter
3.将新字段添加到模型中--指在生产环境中更新代码
4.重启web server 

===add column
ALTER TABLE books_book ADD COLUMN num_pages integer;
UPDATE books_book SET num_pages=0;
ALTER TABLE books_book ALTER COLUMN num_pages SET NOT NULL;


===删除字段
1.从model中删除字段,重启Web Server
2.alter table books_book drop column num_pages;

===删除多对多关联
1.模型中删除ManyToManyField
2.drop table books_book_author;  --删除表


====django form:
cleaned_email()---方法
Django的form系统自动寻找匹配的函数方法,该方法名称以clean_开头,并以字段名称结束。 如果有这样的
方法,它将在校验时被调用。
   如果一个Form实体的数据是合法的,它就会有一个可用的cleaned_data属性。 这是一个包含干净的提交
数据的字典。 Django的form框架不但校验数据,它还会把它们转换成相应的Python类型数据,这叫做清理数
据。

class ContactForm(forms.Form):
    subject = forms.CharField(max_length=100)
    email = forms.EmailField(required=False)
    message = forms.CharField(widget=forms.Textarea)
    def clean_message(self):
        message = self.cleaned_data['message']
        num_words = len(message.split())
        if num_words < 4:
            raise forms.ValidationError("Not enough words!")
        return message

特别地,clean_message()方法将在指定字段的默认校验逻辑执行* 之后* 被调用。(本例中,在必
填CharField这个校验逻辑之后。)因为字段数据已经被部分处理,所以它被从self.cleaned_data中提取出来
了。同样,我们不必担心数据是否为空,因为它已经被校验过了。

_("")  ---是声明一个字符串吗?


form 中 def clean(self)什么时候被执行?


======HTML标签
<label for="">  --值为元素id,指出当前文本标签与哪个元素关联

========questions?
1. reverse(settings.SIGNUP_REDIRECT_URLNAME) 该方法用于做什么?

from django.contrib.auth.decorators import login_required
from django.views.generic.date_based import object_detail
@login_required
def my_view(request):


{ detailDiary.createdDate|date:"Y-m-d H:m:s" }}  --date:后不能加空格
<a href="{% url profile_detail user.username %}">  --给url传参数在页面上
    url(r"^profile/(?P<username>[\w\._-]+)/$",

获取form属性值看来必须得: form_p.cleaned_data["is_commentAllowed"]  ---cleaned_data[]形式

return render_to_response(template_name, RequestContext(request, {"form": form,}))
    ----RequestContext 若替换成 Context会找不到css样式文件(或许因为上下文设置丢失了)


===python类对象的构造时机
class CreateDiaryForm(forms.Form):
    title = forms.CharField(max_length=120, required=False,
                            widget=forms.TextInput(attrs={"id":"blog-title"}))
    content = forms.CharField(min_length=10, max_length=16000, required=False,
                              widget=forms.Textarea(attrs={"id": "blog-content",}), ) 
    book_choices = []    
    books = DiaryBook.objects.all()
    for book_ in books:
        book_choices.append([str(book_.id), book_.name])

    def __init__(self, *args, **kwargs):
        super(CreateDiaryForm, self).__init__(*args, **kwargs)

以上类中代码在import CreateDiaryForm 时被执行,而非类的对象构造时被执行。类的__init__方法在对象实例化时被调用。

=====NEXT
1.复习Request请求参数用法


=={% url 用法
{% url path.to.view arg arg2 as the_url %}
<a href="{{ the_url }}">I'm linking to {{ the_url }}</a>
This {% url ... as var %} syntax will not cause an error if the view is missing. In practice you'll use this to link to views that are optional:

class BookForm(forms.Form):
    name = forms.CharField(max_length=100)
    authors = forms.ModelMultipleChoiceField(queryset=Author.objects.all())


python manage.py validate  --检查model語法和逻辑是否正确
python中的可变参数。*args表示任何多个无名参数,它是一个tuple;**kwargs表示关键字参数,它是一个 dict。并且同时使用*args和**kwargs时,必须*args参数列要在**kwargs前,像foo(a=1, b='2', c=3, a', 1, None, )这样调用的话,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”。


Django内置了一个特殊的forloop模板变量

    forloop.counter:表示当前循环的次数,从1开始计数;而forloop.counter0则从0开始计数
    forloop.revcounter:表示循环中剩余项的个数,循环开始时为循环项总数,最后一次循环置1;而forloop.revcounter0在循环开始时为循环项总数减1,最后一次循环置0
    forloop.first:布尔值,执行第一次循环时为True
    forloop.last:布尔值,执行最后一次循环时为True
    forloop.parentloop:引用上一层循环的对象

forloop变量仅能在循环中使用,一旦脱离{% endfor %}标签就不可访问了 

===javascript
{% block js %}
function setup() {
	var ispublic = document.getElementById("ispublic").checked
	alert(ispublic)
	var commentallowed = document.getElementById("commentallowed").checked
	document.getElementById("only").checked = ispublic
	document.getElementById("not-allow").checked = commentallowed
}

=====django 代码里写中文解决办法:
统一用utf-8,
在views或models最顶上加入下面这行代码:
# -*-coding:utf-8 -*-       ----注意,该应原样加入

======Meta
Django 模型类的Meta是一个内部类。用于定义一些Django模型类的行为特性
    class Meta:
        abstract=True
定义当前的模型类是不是一个抽象类。
erbose_name: 给你的模型类起一个更可读的名字:

===install PIL ImageField image lib:
download it from : http://www.pythonware.com/products/pil/
$ tar xvfz Imaging-1.1.7.tar.gz
$ cd Imaging-1.1.7
$ python setup.py install




=====
First of all, post_save.connect(save_profile, User) shouldn't live inside save_profile function's definition. It should be a statement on the same level as save_profile function's definition. Douban screwed up indents. So you probably got the wrong impression.

Secondly, post_save.connect(save_profile, User) per se won't trigger a save event. As the name suggests, signal is like a listener that is waiting for something to happen. In this case, what post_save.connect(save_profile, User) means is this: create a listener on User model, after any User instance is saved, send a signal to save_profile function so that this function can be triggered. So if you want to test if the signal is waiting, you should create an instance of User and save it.

====
django orm指定字段名,表名

指定字段名: 在定义字段的时候,增加参数db_column=’real_field’; 指定表名: 在model的class中,添加Meta类,在Meta类中指定表名(db_table) 例如在某个models.py文件中,有一个类叫Cat:

class Cat(models.Model):
  name = models.CharField(verbose_name='猫名',  max_length=32, db_column='cat_name')

  class Meta:
    db_table = 'tbl_cat'
    verbose_name = '猫'

在上面这个Cat类里面,name是类变量,而cat_name是表里面的字段名,由db_column指定;而在Meta中有db_table指定的’tbl_cat’则是我们指定的表名。

from django.db.models.signals import pre_save
from django.db import models
import logging
import signals
# Create your models here.
class Article(models.Model):
title = models.CharField(max_length=200)
content = models.TextField()
is_public = models.BooleanField(default=True, blank=True)
def delete(self):
#self.is_public = False
signals.delete_done.send(sender=Article, obj=self)
def __unicode__(self):
return self.title
def zhutao(sender, kwargs):
logging.debug(kwargs)
if "obj" in kwargs:
obj = kwargs.get("obj")
logging.debug(obj.is_public)
obj.is_public = False
obj.save()
logging.debug("signal recieved! zhutao is called.")
logging.debug(obj.is_public)
signals.delete_done.connect(zhutao, sender=Article)

==
但是如果你需要在之后的操作过程中用命令行创建超级用户的话,你可以使用 ``create_superuser.py`` 。
命令如下::

    python /path/to/django/contrib/auth/create_superuser.py


分享到:
评论

相关推荐

    Django-note-app

    Django笔记应用工具Django的Django REST框架SQLite数据库引导程序它有什么作用 : 注册(注册) 登录创建笔记编辑笔记删除笔记通过REST框架将注释表作为json放出(启动应用程序并访问以查看json数据)

    django-notekeeper:一个非常简单的django notes应用程序。 保存便条!

    django-notekeeper 一个非常简单的django笔记应用程序。 保存便条! 内置 :red_heart: 和 :hot_beverage: 通过 产品特点 CRUD笔记 自动复制所选文本 轻松分享 下载便笺为PDF 漂亮而简单的用户界面 加密数据,因此...

    django-learn-note

    DTL D:数据T:模板L:语言 安装虚拟环境 pip install virtualenv 玩互动壳 python manage.py shell 为现有数据库生成模型 python manage.py inspectdb 使用数据库外壳 python manage.py dbshell ...

    Django-Day04.pdf

    Django 模型关联关系详解 在 Django 中,模型关联关系是指数据表之间的依赖和影响关系。在一个项目中,我们经常需要建立不同的模型之间的关联关系,以便更好地管理和查询数据。下面,我们将详细介绍 Django 中的...

    django-keyvalue:一个django应用程序,用于django模型实例之间的通用键值关系。 悬挂任何东西

    django-keyvalue django-keyvalue是用于挂起Django Model实例的直接键值存储。 提供将任何名称值对挂在Django... Note: When a bool, integer or string is supplied as a value we store it in supplied keyvalue

    note-app-django-vue-javascript:使用django和vue.js的笔记应用程序的示例

    这是一个关于构建一个基于Django后端和Vue.js前端的笔记应用程序的示例项目。这个项目展示了如何将这两种技术结合在一起,以实现一个功能完善的Web应用。让我们深入探讨这个项目涉及的关键知识点。 首先,**Django*...

    Better-Note-Taker-

    "Better-Note-Taker-"项目看起来是一个旨在提升记笔记体验的应用或工具。虽然提供的标签为空,我们可以根据标题和描述推测其可能涉及的知识点主要集中在软件开发、用户界面设计以及笔记管理方面。 1. 软件开发:...

    PythonAnywhere-Django-SimpleCoin-Implementation:使用Django框架和Python的基于区块链的横断记录管理

    PythonAnywhere-Django-SimpleCoin实现 使用Django框架和Python的基于区块链的横断记录管理作\u8005=''' ################################################ ####由SSB集团########################################...

    DJANGO_NOTE.zip

    django笔记

    django-ml-app:可以解决您的回归,分类,聚类或深度学习问题的Web应用程序

    自动化数据科学这个django专案有多个应用程式: regml-回归问题classml-分类问题clustml-聚类问题superml-深度学习问题该Web应用程序的最终目标是能够分析提供的数据集并从最常用的模型中推荐最佳的ML模型。...

    11-Note-Taker

    【11-Note-Taker】是一款实用的笔记应用,它以“11音符”为概念,旨在提供一个简洁、高效的记录工具。虽然标签中没有给出具体的编程语言或技术细节,但从项目名称“11-Note-Taker-main”来看,这可能是一个开源项目...

    Django 实现 web服务器.zip

    在本文中,我们将深入探讨如何使用Django框架构建一个Web服务器。Django是Python编程语言中的一个强大且灵活的开源Web应用框架,它遵循模型-视图-控制器(MVC)设计模式,允许开发者快速地开发高效、安全的Web应用...

    calendar-note-server:日历笔记

    "calendar-note-server"是一个以Python为基础的日历笔记应用程序的服务器端。这个项目旨在提供一个集成了日历管理和笔记记录功能的平台,用户可以方便地在特定日期上添加、查看和编辑笔记。Python作为服务器端语言,...

    基于Django与PySide2开发的CloudNote学习笔记源码

    本项目是一款基于Python语言及Django框架和PySide2库开发的学习笔记应用——CloudNote。该应用致力于为用户提供一个便捷的云端笔记记录平台。 技术构成: - 主要编程语言:Python - 前端页面实现:PySide2(用于...

    filepicker-django:django插件,使与Filepicker.io的集成更加容易

    Django文件选择器 django插件,使与Filepicker.io的集成更加容易 ... # *Please note, that FPFileField handle only one file* # In demo you can see how to handle multiple files upload. fpfile = d

    markdown-note:as my notebook;我的基础知识笔记

    markdown-note: docs 本仓库的docs目录是我的语言基础知识的学习笔记,包含 JavaScript(es5/6+) Python(3.6.8) 也包含了一些数据库指令,web框架的简单知识 写着写着就变成了一个教程差不多的东西了。 page-...

    invoice-system:django专案

    :euro_banknote: 计费系统项目,Python和Django 关于 这是使用python和django开发的用于管理小型业务的计费项目示例 :laptop: 技术领域 Python。 Django的。 Postgressql。 码头工人 助推器。 :alarm_clock: ...

    基于python Django编写的学习日志网站.zip

    在这个学习日志系统中,可能会有`Subject`(学科)、`Lesson`(课程)和`Note`(笔记)等模型。每个模型都是一些字段的集合,如`CharField`(字符字段)、`DateField`(日期字段)等。定义好模型后,需要通过`python...

    Python-note:创建用于个人目的的Python语言说明和文档

    在"Python-note-Python-note"这个文件中,你可能会找到关于以上知识点的详细解释和示例代码,这对于个人学习和巩固Python编程技能是非常有价值的。通过阅读和实践,你可以逐步掌握Python,并能利用它解决各种实际...

    python-note:记录我在整个课程中学到的主要概念

    在本压缩包“python-note-main”中,我们可以期待找到一系列关于Python编程的知识点记录。Python是一种广泛使用的高级编程语言,以其简洁、易读的语法而闻名,被应用于各种领域,如Web开发、数据分析、人工智能等。...

Global site tag (gtag.js) - Google Analytics