0%

创建第一个Django应用

检查django是否安装及版本

1
$ python -m django --version

创建项目

1
$ django-admin startproject mysite

创建目录如下所示:

1
2
3
4
5
6
7
8
➜  django git:(master) ✗ tree mysite
mysite
├── manage.py
└── mysite
├── __init__.py
├── settings.py
├── urls.py
└── wsgi.py

运行服务器

1
$ python manage.py runserver

如果出现下面的问题,可以通过migrate来解决。

1
2
You have 13 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.
Run 'python manage.py migrate' to apply them.
1
mysite git:(master) ✗ python manage.py migrate

修改端口

默认情况下为8000端口,可以通过加上port口来更改,比如更改为8080,命令如下

1
$ python manage.py runserver 8080

在修改代码后,不需要重启runserver,因为会重载代码,除非新增了文件。

创建APP应用

1
➜  mysite git:(master) ✗ python manage.py startapp polls

创建了一个polls目录,列表如下:

1
2
3
4
5
6
7
8
9
polls/
__init__.py
admin.py
apps.py
migrations/
__init__.py
models.py
tests.py
views.py

编写第一个视图

编辑文件polls/views.py,内容如下:

1
2
3
4
5
from django.http import HttpResponse


def index(request):
return HttpResponse("Hello, world. You're at the polls index.")

为了使用这个视图,我们需要在polls文件夹新建一个urls.py文件,用来映射该视图。

其中polls/urls.py的内容如下所示:

1
2
3
4
5
6
7
from django.urls import path

from . import views

urlpatterns = [
path('', views.index, name='index'),
]

接下来需要在mysite/urls.py中指定polls.urls文件,内容如下:

1
2
3
4
5
6
7
from django.urls import include, path
from django.contrib import admin

urlpatterns = [
path('polls/', include('polls.urls')),
path('admin/', admin.site.urls),
]

Python Django 教程2

本教程将将创建数据库,模型并介绍自动生成的管理员站点。

创建数据库

数据库默认设置在mysite/settings.py文件中的DATABASES中,其中为ENGINE和NAME字段,可以自行更改。

使用

1
$ python manage.py migrate

来生成settings.py文件中需要的数据库表。

创建模型

修改文件polls/models.py文件内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
from django.db import models


class Question(models.Model):
question_text = models.CharField(max_length=200)
pub_date = models.DateTimeField('date published')


class Choice(models.Model):
question = models.ForeignKey(Question, on_delete=models.CASCADE)
choice_text = models.CharField(max_length=200)
votes = models.IntegerField(default=0)

激活模型

为了可以访问到该模型,需要在INSTLLED_APP参数设置中,添加polls,文件mysite/settings.py内容如下所示:

1
2
3
4
5
6
7
8
9
INSTALLED_APPS = [
'polls.apps.PollsConfig',
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
]

其中polls.aps.PollsConfig位于polls/apps.py文件中

然后使用下述命令来让Django包含polls应用。

1
$ python manage.py makemigrations polls

使用

1
$ python manage.py migrate

来生成settings.py文件中需要的数据库表。

创建模型的三个步骤

  1. Change your models (in models.py).
  2. Run python manage.py makemigrations to create migrations for those changes
  3. Run python manage.py migrate to apply those changes to the database.

玩转API接口

1
$ python manage.py shell

增加易读接口返回

1
2
3
4
5
6
7
8
9
10
11
from django.db import models

class Question(models.Model):
# ...
def __str__(self):
return self.question_text

class Choice(models.Model):
# ...
def __str__(self):
return self.choice_text

Django 管理 Admin

创建管理员账号

1
$ python manage.py createsuperuser

启动服务器

1
$ python manage.py runserver

Now, open a Web browser and go to “/admin/” on your local domain – e.g., http://127.0.0.1:8000/admin/

让poll在admin中可编辑,编辑polls/admin.py文件内容如下:

1
2
3
4
5
from django.contrib import admin

from .models import Question

admin.site.register(Question)

Python Django 教程3

本教程将聚焦于创建公共接口-视图。

Writing more views

更新views页面polls/views.py

1
2
3
4
5
6
7
8
9
def detail(request, question_id):
return HttpResponse("You're looking at question %s." % question_id)

def results(request, question_id):
response = "You're looking at the results of question %s."
return HttpResponse(response % question_id)

def vote(request, question_id):
return HttpResponse("You're voting on question %s." % question_id)

Write views that actually do something

A shortcut: render()

Raising a 404 error

A shortcut: get_object_or_404()

Use the template system

Removing hardcoded URLs in templates

Namespacing URL names

Python Django 教程4

本教程将主要关注简单的表单处理以及如何对代码进行优化。

编写一个简单的表单

使用通用视图:代码还是少点好

改良 URLconf

改良视图

Python Django 教程5

本教程将主要为Django应用创建自动化测试。

Python Django 教程6

本教程将主要为Django应用添加一张样式表和一张图片。

样式表

创建下列代码:

polls/static/polls/style.css

1
2
3
li a {
color: green;
}

下一步,在polls/templates/polls/index.html的顶端添加如下内容 :

1
2
3
4
polls/templates/polls/index.html
{% load staticfiles %}

<link rel="stylesheet" type="text/css" href="{% static 'polls/style.css' %}" />

添加背景图片

我们将创建一个子目录来存放图片。 在polls/static/polls/目录中创建一个 images 子目录。在这个目录中,放入一张图片background.gif。换句话,将你的图片放在 polls/static/polls/images/background.gif。

然后,向你的样式表添加(polls/static/polls/style.css):

1
2
3
body {
background: white url("images/background.gif") no-repeat right bottom;
}

重新加载http://localhost:8000/polls/,你应该在屏幕的右下方看到载入的背景图片。

pip使用国内镜像源

pip是Python中非常方便易用的安装包管理器,但是在实际下载安装包的时候总是连接不上或者下载速度特别慢, pypi.python.org就是其中一个。

所以,使用pip给Python安装软件时,经常出现Timeout连接超时错误。修改pip连接的软件库到国内的源可以解决这个问题。

方法如下:

直接修改配置文件

1)检查pip.conf文件是否存在

1
2
3
4
$ cd ~
$ mkdir .pip
$ ls ~/.pip
$

2)直接编辑pip.conf
vi ~/.pip/pip.conf

1
2
3
4
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com

或者

1
2
3
4
5
6
7
8
9
10
11
12
13
[global]  

timeout = 6000

index-url = http://pypi.douban.com/simple/

[install]

use-mirrors = true

mirrors = http://pypi.douban.com/simple/

trusted-host = pypi.douban.com

临时换源

如果只是想临时更改一下,可以使用-i参数,

命令格式:sudo pip3 install 包名 -i 镜像源url

比如:

1
$ pip3 install numpy -i https://pypi.douban.com/simple

简介

pip是Python中非常方便易用的安装包管理器,但是在实际下载安装包的时候总是连接不上或者下载速度特别慢, pypi.python.org就是其中一个。

所以,使用pip给Python安装软件时,经常出现Timeout连接超时错误。修改pip连接的软件库可以解决这个问题。

更新软件

有两种方法,一种可以通过逐个更新模块:

1
2
3
4
5
# 查看所有可更新的模块:  
pip list --outdated

# 更新某一个模块:     
pip install --upgrade module_name
1
2
3
4
5
#安装对应的模块:     
$ pip install pip-review

#更新所有的模块:     
$ pip-review --local --interactive

更新源

方法如下:

直接修改配置文件

1)检查pip.conf文件是否存在

1
2
3
4
$ cd ~
$ mkdir .pip
$ ls ~/.pip
$

2)直接编辑pip.conf
sudo vi ~/.pip/pip.conf

1
2
3
4
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host = mirrors.aliyun.com

或者

1
2
3
4
5
6
7
8
9
10
11
12
13
[global]  

timeout = 6000

index-url = https://pypi.douban.com/simple/

[install]

use-mirrors = true

mirrors = https://pypi.douban.com/simple/

trusted-host = pypi.douban.com

临时换源

命令格式:sudo pip3 install 包名 -i 镜像源url

比如:
sudo pip3 install django -i https://pypi.douban.com/simple

Troubleshooting

1
2
3
4
5
pip install mpi4py
Traceback (most recent call last):
File "~/virtual_evn/bin/pip", line 6, in <module>
from pip._internal.cli.main import main

解决方法:

1
$ export PYTHONPATH=~/virtual_env/lib/python3.7/site-packages/

PyQt界面设计

UI => Python

在Qt的界面开发开发中,设计界面可以使用Qt Creator或者Designer,本质是一样的。

设计完成会生成一个ui后缀的文件,格式其实是xml语言的文本文件。

按照设计比如生成一个window.ui的文件,那么可以使用pyuic来生成python文件,命令如下所示:

1
pyuic5 window.ui -o window.py

此时的window.py文件就是界面的python接口了,接下来我们需要做的就是编写一个程序调用这个界面,简单的如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog
from window import *

class MyMainWindow(QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MyMainWindow, self).__init__(parent)
self.setupUi(self)

self.actionClose.triggered.connect(self.close)
self.actionOpen.triggered.connect(self.openMsg)

if __name__ == '__main__':
app = QApplication(sys.argv)
myWin = MyMainWindow()
myWin.show()
sys.exit(app.exec_())

RC = > Python

PyQt5提供了pyrcc5来将资源文件转化为python文件,默认加上rc后缀与Qt Designer保持一致。命令如下所示:

1
pyrcc5 app.qrc -o app_rc.py

check一下生成的python文件,可以直接调用。

python 环境变量设置PYTHONPATH

PYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找。

打印PYTHONPATH:

1
2
3
import os
print sys.path
>['', '/usr/local/lib/python2.7/dist-packages/dlib-19.4.0-py2.7-linux-x86_64.egg', '/home/leo',...]

注意:sys.path 也可以用 os.sys.path 替换,两个应该是同一个命令,推荐使用sys.path, 因为 os.sys.path 在python document 中好像没有提及.

设置PYTHONPATH

方法一:命令窗口添加路径

1
export PYTHONPATH=$PYTHONPATH:/home/leo

注意:此方法只在当前命令窗口生效,即如果打开一个新的Terminal 窗口,定位到当前目录, 打印PYTHONPATH 是没有刚才加入的路径的.

方法二:在python 中添加:

1
2
import sys
sys.path.append('/home/leo/')