Django
- 虚拟环境
VirtualEnv用于在一台机器上创建多个独立的Python虚拟运行环境,多个Python环境相互独立,互不影响,它能够:
在没有权限的情况下安装新套件 不同应用可以使用不同的套件版本 套件升级不影响其他应用
注意虚拟环境的包安装不要加sudo,sudo会装在全局! 注意虚拟环境的包安装不要加sudo,sudo会装在全局! 注意虚拟环境的包安装不要加sudo,sudo会装在全局!
1.1. 1 虚拟环境的创建和使用
项目1 ——> 依赖 mysqldb 1.2.5
项目2 ——> 依赖 mysqldb 2.0.1
之前安装python 包命令 sudo pip3 install 包名 包的安装路径 /usr/loacal/lib/pythoon3.5/dist-packages
那么安装同一个包的不同版本出现的情况是: 后安装的包会吧原来安装的包覆盖掉
这样子,一台机器上两个项目依赖与相同包的不同版本,则会导致一些项目运行失败
解决方案就是 : 虚拟环境
虚拟环境是真是python环境的复制版本
1.2. 2 安装虚拟环境的命令
安装虚拟环境 sudo pip install virtualenv
安装虚拟环境扩展包 sudo pip install virtualenvwrapper
编辑用户主目录下的.bashrc 文件 cd ~/ vim .bashrc
添加下面2行($home代表家目录)
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
source .bashrc #让你的文件立马生效 第一行代表你创建的虚拟环境放在哪里 第二行代表开启了 扩展命令的全局变量
使用 source .bashrc 使其生效一下
1.2.1. 创建 虚拟环境命令:
mkvirtualenv 虚拟环境名
注意如果不加 -p python3 则配置是python2的虚拟环境
1.2.2. 创建一个python3的虚拟环境
mkvirtualenv -p python3 xdl (如果提示没有什么module 则直接pip安装即可)
看图最后一行,如果你前面出现了括号,说明你正在虚拟环境中工作
虚拟机的位置 发现安装位置的 lib中 是pyton3.6
而且以后的安装包的位置也就是在虚拟环境中,在虚拟环境中使用的也是这个环境的python 初次之外 跟其他没有任何区别,并不会说你创建了一个目录,然后退出虚拟环境后就没有了,只是复制一个python的运行环境
在虚拟环境中使用的python是复制的python 安装的python包也是在复制的python中
1.2.3. 进入虚拟环境工作
workon 虚拟环境名
1.2.4. 查看机器上有多少个虚拟环境
workon 空格 + 两个tab
1.2.5. 退出虚拟环境
deactivate ( 英[ˌdi:ˈæktɪveɪt] 英文解除的意思)
1.2.6. 演示一下
创建后仍然有文件 退出 进入工作 查看多少虚拟环境
1.2.7. 注意 创建必须有网
1.2.8. 删除虚拟环境
rmvirtualenv + 名字
1.2.9. 虚拟环境安装包命令
pip install 包名 注意: 不能用 sudo pip install 包名, 这个命令会把包安装到真实的主机环境上。
apt-get install 软件 pip install 包名
两个命令区别: pip依赖python环境,是安装python包。 而apt-get 是安装ubuntu的软件
1.2.10. 查看虚拟环境有哪些包
pip list
pip freeze 解释:
pip freeze 为什么比 pip list 的包少几个呢? 因为pip , wheel , setuptools 等包,是自带的而无法(un)install的。考虑到pip freeze的用途,所以这些包并没有显示。
注意虚拟环境的包安装不要加sudo,sudo会装在全局! 注意虚拟环境的包安装不要加sudo,sudo会装在全局! 注意虚拟环境的包安装不要加sudo,sudo会装在全局!
1.3. 扩展讲解: 虚拟环境常用命令
创建虚拟环境:
mkvirtualenv --python=路径\python.exe 虚拟环境
cd py2/bin #进入环境下启动
source activate # 启动
deactivate # 退出环境
通用命令:
查看已安装的包
pip list
检查哪些包需要更新
pip list --outdated
升级包
pip install --upgrade SomePackage
卸载包
pip uninstall SomePackage
参数解释
pip --help
创建环境
mkvirtualenv 虚拟环境名称 (python2)
mkvirtualenv -p python3 虚拟环境名称 (python3)
创建成功后,会自动工作在这个虚拟环境上
提示1:创建虚拟环境需要联网
提示2:工作在虚拟环境上,提示符最前面会出现“(虚拟环境名称)”
退出环境
deactivate
workon
两次tab键
删除虚拟环境
rmvirtualenv 虚拟环境名称
安装环境
pip install 包名称
批入导入环境包
在本机进入虚拟环境,执行命令导出当前需要的所有包
pip freeze > plist.txt
通过ftp软件将项目代码和plist.txt文件上传到服务器
创建虚拟环境,在虚拟环境上安装包
mkvirtualenv 虚拟环境名称
pip install -i https://pypi.douban.com/simple/ -r plist.txt
2. 项目创建
django安装后 进行django框架的搭建
命令:django-admin startproject mysite
mysite是项目目录名,可以自定义,
注意:创建应用必须先进入虚拟环境
// 创建一个工作目录,以后每天的代码都放这里 (xdl) xdl@xdl-virtual-machine:/home ls (xdl) xdl@xdl-virtual-machine:~ cd xdl01/ (xdl) xdl@xdl-virtual-machine:~/xdl01$
我们来看看startproject创建的内容:
项目目录如下:
├── manage.py └── test1 ├── init.py 说明test1 是一个python包 ├── settings.py 项目的配置文件,数据库等 ├── urls.py 进行url路由的配置 └── wsgi.py 调东西遵循wsgi协议,web服务器和Django交互的入口
manage.py 项目的管理文件
关于上面自动生成的目录与文件解释如下
外部test/根目录只是一个项目的容器。它的名字与Django无关; 您可以将其重命名为您喜欢的任何内容。 manage.py:一个命令行实用程序,可以让您以各种方式与此Django项目进行交互。你可以阅读所有的细节 manage.py在Django的管理和manage.py。 内部mysite/目录是您的项目的实际Python包。它的名字是您需要用来导入其中的任何内容的Python包名称(例如mysite.urls)。 mysite/init.py:一个空的文件,告诉Python这个目录应该被认为是一个Python包。 mysite/settings.py:此Django项目的设置/配置。 Django设置会告诉你所有关于设置的工作原理。 mysite/urls.py:该Django项目的URL声明; 您的Django动力网站的“目录”。 mysite/wsgi.py:WSGI兼容的Web服务器为您的项目提供服务的入口点。
2.1启动项目
在当前 manage.py的文件目录下 执行一下命令
python manage.py runserver
您将在命令行中看到以下输出:
Performing system checks…
System check identified no issues (0 silenced).
You have unapplied migrations; your app may not work properly until they are applied.
Run ‘python manage.py migrate’ to apply them.(注意:现在忽略关于未执行应用数据库迁移的警告)
August 07, 2017 - 15:50:53
Django version 1.11, using settings ‘mysite.settings’
Starting development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
注意:通过IP访问后报如下错误:
DisallowedHost at /polls Invalid HTTP_HOST header: ‘192.168…:8000’. You may need to add ‘192.168…’ to ALLOWED_HOSTS.
HTTP_HOST标头无效:‘192.168…:8000’。您可能需要将“192.168…”添加到ALLOWED_HOSTS 解决: 进入 mysite/settings.py文件 ALLOWED_HOSTS = [‘192.168.194.132’]
- 浏览器访问
127.0.0.1:8000 看到 it works 说明运行成功
4 创建应用
- 1 创建应用
创建目录。
要创建您的应用程序,请确保您与目录位于同一目录,manage.py 并键入以下命令:
workon django
python manage.py startapp myweb
这将创建一个目录myweb,其目录如下:此目录结构将容纳轮询应用程序。
[root@localhost demo]# tree mysite/
mysite/
├── manage.py
├── mysite
│ ├── init.py
│ ├── settings.py
│ ├── urls.py
│ └── wsgi.py
└── myweb
├── admin.py
├── apps.py
├── init.py
├── migrations
│ └── init.py
├── models.py
├── tests.py
└── views.py
4. 2 创建视图
Django具有“视图”的概念来封装负责处理用户请求和返回响应的逻辑。
在myweb/views.py
from django.shortcuts import render
from django.http import HttpResponse
Create your views here.
定义视图函数,业务逻辑
def index(request):
# 返回一句话
return HttpResponse(‘Hello World!!!’)
4.3 修改root路由 mysite/urls.py
当用户使用django提供的站点进行访问时,首页由路由进行匹配访问地址,然后指定函数或子路由进行处理
from django.conf.urls import url,include
from django.contrib import admin
urlpatterns = [
# url(r’^admin/’, admin.site.urls),
url(r’^’, include(‘myweb.urls’)),
]
4. 4 在应用下创建子路由
from django.conf.urls import url
from . import views
urlpatterns = [
url(r’^hello/’,views.index),
]
4. 5 通过浏览器访问服务
注意:url路由,由上而下 进行匹配,如果在上面就匹配成功,则不会向下匹配
通过浏览器访问服务 127.0.0.1:8000/abc ==> root url(根路由) ==> 加载子路由(myweb/urls.py)
==> 正则匹配访问的路径(path) =-=> 视图函数(views.index)
==> views.py index() 响应内容
4.6 使用模板
作为Web 框架,Django 需要一种很便利的方法以动态地生成HTML。
最常见的做法是使用模板。
模板包含所需HTML 输出的静态部分,以及一些特殊的语法,描述如何将动态内容插入。
在当前manage.py的同级目录中创建一个文件夹 templates/index.html
在settings.py文件中 TEMPLATES模块设置选项
‘DIRS’: [os.path.join(BASE_DIR,“templates”)],
在子路由中添加一个路由
url(r’^tmp$’,views.tmp,name=‘myweb_tmp’),
在views.py 创建一个 tmp的视图函数
def tmp(request):
# 加载一个模块
return render(request,‘index.html’)
如果在视图函数加载模板时,分配了数据,就可以在模板中使用数据
def tmp(request):
实例化 模型对象,获取数据
分配数据,
context = {‘info’:‘aabbccddee’}
加载一个模块
return render(request,‘index.html’,context)
在html模板中输出变量 输出