1.定義Model的時候姑尺,寫一個unicode或者**str函數(shù)
from __future__ import unicode_literals
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Article(models.Model):
title = models.CharField('標(biāo)題', max_length=256)
content = models.TextField('內(nèi)容')
pub_date = models.DateTimeField('發(fā)表時間', auto_now_add=True, editable = True)
update_time = models.DateTimeField('更新時間',auto_now=True, null=True)
def __str__(self):
return self.title
def __unicode__(self):# 在Python3中用 __str__ 代替 __unicode__
return self.title
python_2_unicode_compatible 會自動做一些處理去適應(yīng)python不同的版本竟终,本例中的 unicode_literals 可以讓python2.x 也像 python3 那個處理 unicode 字符,以便有更好地兼容性切蟋。
2.配置需要在后臺顯示的字段统捶,使用list_display
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title','pub_date','update_time',)
admin.site.register(Article,ArticleAdmin)
list_display 就是來配置要顯示的字段的,當(dāng)然也可以顯示非字段內(nèi)容,或者字段相關(guān)的內(nèi)容瘾境,比如:
#在model.py中
class Person(models.Model):
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
def my_property(self):
return self.first_name + ' ' + self.last_name
my_property.short_description = "Full name of the person"
full_name = property(my_property)
在admin.py中
class PersonAdmin(admin.ModelAdmin):
list_display = ('full_name',)
admin.site.register(Person, PersonAdmin)
3.在后臺獲取前臺傳來的數(shù)據(jù)是使用 request.GET.get('key',None)歧杏,在沒有數(shù)據(jù)時不會報錯
4.django服務(wù)部署:
4.1:apache+wsgi+django部署:
- 安裝 apache2 和 mod_wsgi
sudo apt-get install apache2
# Python 2
sudo apt-get install libapache2-mod-wsgi
# Python 3
sudo apt-get install libapache2-mod-wsgi-py3
- 確認(rèn)安裝的apache2版本號
apachectl -v
- 準(zhǔn)備一個新網(wǎng)站
ubuntu的apache2配置文件在 /etc/apache2/ 下
備注:centos 用戶 apache 名稱為 httpd 在 /etc/httpd/ 中
新建一個網(wǎng)站配置文件
sudo vi /etc/apache2/sites-available/sitename.conf
示例內(nèi)容如下:
<VirtualHost *:80>
ServerName www.yourdomain.com
ServerAlias otherdomain.com
ServerAdmin tuweizhong@163.com
Alias /media/ /home/tu/blog/media/
Alias /static/ /home/tu/blog/static/
<Directory /home/tu/blog/media>
Require all granted
</Directory>
<Directory /home/tu/blog/static>
Require all granted
</Directory>
WSGIScriptAlias / /home/tu/blog/blog/wsgi.py
# WSGIDaemonProcess ziqiangxuetang.com python-path=/home/tu/blog:/home/tu/.virtualenvs/blog/lib/python2.7/site-packages
# WSGIProcessGroup ziqiangxuetang.com
<Directory /home/tu/blog/blog>
<Files wsgi.py>
Require all granted
</Files>
</Directory>
</VirtualHost>
備注:把上面配置文件中這兩句的備注去掉,可以使用 virtualenv 來部署網(wǎng)站迷守,當(dāng)然也可以只寫一個 /home/tu/blog
# WSGIDaemonProcess ziqiangxuetang.com python-path=/home/tu/blog:/home/tu/.virtualenvs/blog/lib/python2.7/site-packages
# WSGIProcessGroup ziqiangxuetang.com
4.2:django+ngjnx+uwsgi socket部署:
5:發(fā)送郵件:
send_mail 每次發(fā)郵件都會建立一個連接犬绒,發(fā)多封郵件時建立多個連接。而 send_mass_mail 是建立單個連接發(fā)送多封郵件兑凿,所以一次性發(fā)送多封郵件時 send_mass_mail 要優(yōu)于 send_mail凯力。
#一次發(fā)送一個郵件
from django.core.mail import send_mail
send_mail('Subject here', 'Here is the message.', 'from@example.com',
['to@example.com'], fail_silently=False)
#一次發(fā)送多個郵件
from django.core.mail import send_mass_mail
message1 = ('Subject here', 'Here is the message', 'from@example.com', ['first@example.com', 'other@example.com'])
message2 = ('Another Subject', 'Here is another message', 'from@example.com', ['second@test.com'])
send_mass_mail((message1, message2), fail_silently=False)