标签归档:django

CentOS 6 安装 Python3.5&配置Django

最近看<unix编程艺术>,又想折腾python了。在mac上可以直接brew install python3

可惜在centos上我试了yum install python3不管用。于是找到了下面这篇文章,希望对大家有用。

 

安装python3.5

安装步骤如下 :
1 准备编译环境(环境如果不对的话,可能遇到各种问题,比如wget无法下载https链接的文件)

yum groupinstall 'Development Tools'
yum install zlib-devel bzip2-devel  openssl-devel ncurses-devel

2 下载 Python3.5代码包

wget  https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tar.xz

3 编译

tar Jxvf  Python-3.5.0.tar.xz
cd Python-3.5.0
./configure --prefix=/usr/local/python3
make && make install

4 设置环境变量

echo 'export PATH=$PATH:/usr/local/python3/bin' >> ~/.bashrc

5 或者可以直接替换python2

rm   /usr/bin/python
ln -sv  /usr/local/bin/python3.5 /usr/bin/python
这样做的目的是在系统任意目录敲入python调用的是python3的命令,而非系统默认2.6.6的
但是这样同时这会导致依赖python2.6的yum不能使用,因此还要修改yum配置。

6 更新yum配置。

ll /usr/bin | grep python
这时/usr/bin目录下面是包含以下几个文件的(ll |grep python),其中有个python2.6,只需要指定yum配置的python指向这里即可
vim /usr/bin/yum
通过vim修改yum的配置
#!/usr/bin/python改为#!/usr/bin/python2.6,保存退出。
完成了python3的安装。

安装pip

pip是根据官网wiki安装的,地址点击这里
1,安装setuptools。pip安装前需要先安装setuptools,在上面的页面中给出了下载地址。下载并执行即可:

wget https://bitbucket.org/pypa/setuptools/raw/bootstrap/ez_setup.py
python ez_setup.py

2 我用上面的方法没有成功,网上找到了这个:
先下载get-pip.py,

If [setuptools](https://pypi.python.org/pypi/setuptools) is not already installed, get-pip.py will install [setuptools](https://pypi.python.org/pypi/setuptools) for you.  
Beginning with pip v1.5.1, get-pip.py stopped requiring setuptools to be installed first.

wget https://bootstrap.pypa.io/get-pip.py
python get-pip.py

pip安装后执行pip依然无法找到命令,细看pip安装的提示信息发现安装到了python3下面,这里肯定不是系统的classpath目录。
如下:

 Installing pip3 script to /var/python3/bin    
 Installing pip3.3 script to /var/python3/bin       
 Installing pip script to /var/python3/binSuccessfully installed pip

解决办法就是简单地建立连接到系统的classpath目录之一:
mv /usr/bin/pip /tmp
ln -sv /usr/local/python3/bin/pip /usr/bin/pip
3,按照pip的说法,最后执行

To upgrade an existing [setuptools](https://pypi.python.org/pypi/setuptools)run
pip install -U setuptools

悲剧没成功。。。

安装git:

执行并根据提示一路next,安装完成后执行git –help测试是否安装成功。需要说明git的安装不是必须的(最终我也没用,因为在国内呵呵),除非你希望始终保持最新发布的django代码,否则可以忽略。

 yum install git

安装django

有了pip,这件事变得非常简单,只需要一个命令即可。需要说明的是和上面的问题一样,你需要在系统classpath目录下建立到django-admin.py的连接。

pip install django
ln -s /var/python3/lib/python3.3/site-packages/django/bin/django-admin.py    /usr/bin/django-admin.py
#这里视你的django安装位置而定——一般是python的site-packages下。

如果pip没法执行,直接去官方下载Django最新版,编译安装。
它会安装在你的python3目录里面,所以需要配置环境变量。

执行后django安装完成。下面建立一个演示的website,参考来自django的指导,通过执行命令

 django-admin.py startproject mysite

建立一个名为mysite的工程其结构如下:

mysite/ 
       manage.py   
       mysite/ 
                __init__.py 
                settings.py 
                urls.py
                wsgi.py
外层mysite:仅仅是工程的容器,叫什么名字没关系。  
manage.py:一个命令行的工具类用于和你的工程交互。
内层mysite:实际的python package。   
__init__.py:空文件,它的存在是为了表明这是一个python package。    settings.py: Django的配置文件。 
urls.py:简单的说就是用于url派发的配置。   
wsgi.py: 用于和wsgi server连接的接入点,商用部署时用到的server。

到现在django的安装和工程已经建立,可以启动django开发的服务器了。django警告这个内置的server只适合开发用而非商用是没有安全保护的。执行以下命令启动django:

python manage.py runserver

这时候如果你是直接在linux主机上访问的那么已经可以通过localhost:8000来访问了,如果和我一样通过vmvare启动的linux并想在自己的物理机上访问暂时是行不通的。
可以通过命令

python manage.py runserver 0.0.0.0:8000

使django server监听public ip以便从外面访问

修复python2

如果不小心误删除了/usr/bin/python2这个文件,导致yum不能使用。
解决办法——重装相关的rpm文件。
所有的rpm文件可以在网易提供的景象中下载,应该是国内比较快的地方了,地址:http://mirrors.163.com/centos/6.5/os/i386/Packages/
rpm列表如下:
python-2.6.6-29.el6.x86_64.rpm
python-devel-2.6.6-29.el6.x86_64.rpm
python-iniparse-0.3.1-2.1.el6.noarch.rpm
python-setuptools-0.6.10-3.el6.noarch.rpm
python-urlgrabber-3.9.1-8.el6.noarch.rpm
rpm-python-4.8.0-19.el6.x86_64.rpm
yum-3.2.29-22.el6.centos.noarch.rpm
yum-metadata-parser-1.1.2-16.el6.x86_64.rpm
python-pycurl-7.19.0-8.el6.x86_64.rpm

注意rpm命令,必须要追加 –replacepkgs 参数,强制其重新安装,否则rpm会报告说package已安装。

rpm -Uvh --replacepkgs ***.rpm

至此打完收工:)

Python Django模型内部类meta详解

Django 模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性。以下对此作一总结:
• abstract

    这个属性是定义当前的模型类是不是一个抽象类。所谓抽象类是不会对应数据库表的。一般我们用它来归纳一些公共属性字段,然后继承它的子类可以继承这些字段。比如下面的代码中Human是一个抽象类,Employee是一个继承了Human的子类,那么在运行syncdb命令时,不会生成Human表,但是会生成一个Employee表,它包含了Human中继承来的字段,以后如果再添加一个Customer模型类,它可以同样继承Human的公共属性:

class Human(models.Model):
    name=models.CharField(max_length=100)
    GENDER_CHOICE=((u’M’,u’Male’),(u’F’,u’Female’),)
    gender=models.CharField(max_length=2,choices=GENDER_CHOICE,null=True)
    class Meta:
        abstract=True
class Employee(Human):
    joint_date=models.DateField()
class Customer(Human):
    first_name=models.CharField(max_length=100)
    birth_day=models.DateField()

上面的代码,执行python manage.py syncdb 后的输出结果入下,可以看出Human表并没有被创建:

$ python manage.py syncdb
 Creating tables …
 Creating table myapp_employee
 Creating table myapp_customer
 Installing custom SQL …
 Installing indexes …
 No fixtures found.
• app_label

app_label这个选项只在一种情况下使用,就是你的模型类不在默认的应用程序包下的models.py文件中,这时候你需要指定你这个模型类是那个应用程序的。比如你在其他地方写了一个模型类,而这个模型类是属于myapp的,那么你这是需要指定为:

app_label=’myapp’
• db_table

db_table是用于指定自定义数据库表名的。Django有一套默认的按照一定规则生成数据模型对应的数据库表名,如果你想使用自定义的表名,就通过这个属性指定,比如:

table_name=’my_owner_table’
• db_tablespace

有些数据库有数据库表空间,比如Oracle。你可以通过db_tablespace来指定这个模型对应的数据库表放在哪个数据库表空间。

• get_latest_by

由于Django的管理方法中有个lastest()方法,就是得到最近一行记录。如果你的数据模型中有 DateField 或 DateTimeField 类型的字段,你可以通过这个选项来指定lastest()是按照哪个字段进行选取的。

• managed

由于Django会自动根据模型类生成映射的数据库表,如果你不希望Django这么做,可以把managed的值设置为False。

• order_with_respect_to

这个选项一般用于多对多的关系中,它指向一个关联对象。就是说关联对象找到这个对象后它是经过排序的。指定这个属性后你会得到一个get_XXX_order()和set_XXX_order()的方法,通过它们你可以设置或者回去排序的对象。
• ordering

这个字段是告诉Django模型对象返回的记录结果集是按照哪个字段排序的。比如下面的代码:

ordering=[‘order_date’] # 按订单升序排列
ordering=[‘-order_date’] # 按订单降序排列,-表示降序
ordering=[‘?order_date’] # 随机排序,?表示随机
• permissions

permissions主要是为了在Django Admin管理模块下使用的,如果你设置了这个属性可以让指定的方法权限描述更清晰可读。

• proxy

这是为了实现代理模型使用的,这里先不讲随后的文章介绍。

• unique_together

unique_together这个选项用于:当你需要通过两个字段保持唯一性时使用。比如假设你希望,一个Person的FirstName和LastName两者的组合必须是唯一的,那么需要这样设置:

unique_together = ((“first_name”, “last_name”),)
• verbose_name

verbose_name的意思很简单,就是给你的模型类起一个更可读的名字:

verbose_name = “pizza”
• verbose_name_plural

这个选项是指定,模型的复数形式是什么,比如:

verbose_name_plural = “stories”

如果不指定Django会自动在模型名称后加一个’s’

下面关于Python的文章您也可能喜欢,不妨看看:

Python:在指定目录下查找满足条件的文件  http://www.linuxidc.com/Linux/2015-08/121283.htm

Python2.7.7源码分析  http://www.linuxidc.com/Linux/2015-08/121168.htm

无需操作系统直接运行 Python 代码  http://www.linuxidc.com/Linux/2015-05/117357.htm

CentOS上源码安装Python3.4  http://www.linuxidc.com/Linux/2015-01/111870.htm

《Python核心编程 第二版》.(Wesley J. Chun ).[高清PDF中文版] http://www.linuxidc.com/Linux/2013-06/85425.htm

《Python开发技术详解》.( 周伟,宗杰).[高清PDF扫描版+随书视频+代码] http://www.linuxidc.com/Linux/2013-11/92693.htm

Python脚本获取Linux系统信息 http://www.linuxidc.com/Linux/2013-08/88531.htm

Ubuntu下用Python搭建桌面算法交易研究环境 http://www.linuxidc.com/Linux/2013-11/92534.htm

Python 语言的发展简史 http://www.linuxidc.com/Linux/2014-09/107206.htm

Python 的详细介绍请点这里
Python 的下载地址请点这里

让Markdown支持Django1.6及代码语法高亮

Django项目升级到1.6后,发现django.contrib.markup已经被移除了,其实早在1.5就不推荐使用,标记为了deprecated.如果想让的markdown语法能继续正常使用的话,你可以自定义一个过滤器.

#my_markup.py
mport markdown

from django import template
from django.template.defaultfilters import stringfilter
from django.utils.encoding import force_unicode
from django.utils.safestring import mark_safe

register = template.Library()

@register.filter(is_safe=True)
@stringfilter
def my_markdown(value):
    extensions = ["nl2br", ]

    return mark_safe(markdown.markdown(force_unicode(value),
                                       extensions,
                                       safe_mode=True,
                                       enable_attributes=False))

保存在app的templatetags目录下面,在模板中加载就行了.

{% load my_markup %}
{{ value|my_markdown }}

————————————–分割线 ————————————–

由于Django1.6默认不支持markdown了,所以需要自己写过滤器。现在遇到一个新的麻烦是,代码块默认情况下没有任何高亮显示,看起来非常的单调。因此今天研究了一番。

python的markdown模块功能很完善,亮点是它还能支持扩展插件,CodeHilite就是用来做代码高亮扩展功能的。使用非常简单,

def md1(value):
    extensions = ["nl2br", "codehilite"]
    return mark_safe(markdown.markdown(force_unicode(value),
                                   extensions,
                                   safe_mode=True,
                                   enable_attributes=False))

其实就是把codehilite加入到extensions列表中去就可以了,此时由markdown渲染后文件的代码块所在的div标签会多了一个class属性class="codehilite"。但是事情还没完。代码还没有真正加上高亮。真正的高亮功能是由Pygments来完成的。

因此还要安装Pygments,安装方式也非常简单

pip install pygments

如果你人品和我一样差的话,需要去 Bitbucket下载他的源码才能完成安装。下载下来解压执行:

python setup.py install

顺利安装完成后,还缺少一样东西,既然是代码高亮的话,肯定是有CSS来驱动的,pygments默认是不带样式的。不过你可以借助它生成一个默认的css。

E:\>pygmentize -S default -f html > default.css

把default.css放到项目中去,此时就能看到高亮代码了。如果你不喜欢这个样式的话,pygments-css提供了很多样式供你选择。

Django1.8返回json字符串和接收post的json字符串内容  http://www.linuxidc.com/Linux/2015-07/120226.htm

如何使用 Docker 组件开发 Django 项目?  http://www.linuxidc.com/Linux/2015-07/119961.htm

Ubuntu Server 12.04 安装Nginx+uWSGI+Django环境 http://www.linuxidc.com/Linux/2012-05/60639.htm 

Django+Nginx+uWSGI 部署 http://www.linuxidc.com/Linux/2013-02/79862.htm 

Django实战教程 http://www.linuxidc.com/Linux/2013-09/90277.htm 

Django Python MySQL Linux 开发环境搭建 http://www.linuxidc.com/Linux/2013-09/90638.htm 

Django 的详细介绍请点这里
Django 的下载地址请点这里

PyPy运行Django+MySQL简单教程

<

div id=”content” contentScore=”2676″>PyPy是Python开发者为了更好的Hack Python创建的项目。此外,PyPy比CPython是更加灵活,易于使用和试验,以制定具体的功能在不同情况的实现方法,可以很容易实施。 该项目的目标是,让PyPy比C实现的Python更为容易的适应各个项目和方便裁剪。

PyPy的第一部分:用Python实现的Python

其实这么说并不准确,准确得说应该是用rPython实现的Python,rPython是Python的一个子集,虽然rPython不是完整的Python,但用rPython写的这个Python实现却是可以解释完整的Python语言。

PyPy的第二部分:编译器

这是一个编译rPython的编译器,或者说这个编译器有一个rPython的前端,目前也只有这么一个前端,不过它的后端却是不少,也就是说这个编译器支持许多的目标语言,比较重要的有:C,CIL,Javascript …

1、首先安装pypy

官网:http://pypy.org/ 下载的1.9的,下载完成之后用tar xf 文件名,解压缩。复制pypy-1.9到~/.local/目录下。

在local的bin(如果没有的话,可以自己新建一个bin)下建立一个软链接:ln -s ~/.local/pypy-1.9/bin/pypy ~/.local/bin/

到此并没有结束,你还需要配置环境变量,在用户的家目录下的.bashrc中添加:export PATH=$PATH:~/.local/bin/,就是把刚才的bin目录放到环境变量中。
执行: source .bashrc ,重新加载下环境配置。

最后在终端,输入pypy,是不是像python那样,进入了交互模式,并且多了行类似于这样的提示: [PyPy 1.9.0 with GCC 4.4.3] on linux2

2、安装django

其实是把django放到pypy目录的site-package下,直接把现在python的site-package下的包复制过来就行了。

3、安装mysql-python

从这下载:http://sourceforge.net/projects/mysql-python/?source=dlp 解压缩,然后用pypy安装: pypy setup.py install

这个过程中会遇到的问题是:mysql_config not found,查了下发现是没有安装:libmysqld-dev 用命令: sudo apt-get install libmysqld-dev

4、尝试下

完成上面操作之后,看看是否安装成功了,终端下用:pypy进入交互模式
先:import django,没有报错,说明django可用了。
接着尝试mysql-python: import MySQLdb ,没有报错,说明成功。然后就可以继续下一步操作了。

创建一个django项目: django-admin.py startproject pypydemo ,cd到pypydemo中,执行 pypy manage.py runserver . 程序启动成功,就可以了。

关于用pypy运行django在性能方面的提升,以后做下测试。在正规的业务代码中测试。

PyPy 的详细介绍:<a title=”PyPy” href=”../../Linu