一、环境安装配置
1.检测
1.检测python环境2.检测pippython python3
pip -V pip3 -V
2.pip安装
2.1概述
pip 是 Python 包管理工具,该工具提供了对Python 包的查找、下载、安装、卸载的功能pip相关命令 pip install xxx:安装xxx依赖包 pip list:查看所有依赖包 pip freeze:查看新安装的包 pip uninstall xxx :卸载xxx包
2.2安装
#[使用普通用户操作] #第一步:查看pip版本 查看pip版本:pip -V 查看pip3版本:pip3 -V #第二步:安装pip[如果存在则不需要安装] 安装pip: sudo apt install python-pip 安装pip3: sudo apt install python3-pip #第三步:更新pip[如果pip版本高于9.0则可以不更新],最新版本为18.1 更新pip: sudo pip install --upgrade pip 更新pip3: sudo pip3 install --upgrade pip #第四步:检测pip是否可用 pip pip3 #第五步:让pip默认使用python3 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150 #原因:默认情况下,python代表Python2.x,python3代表python3.x,现在常用的是python3,经过设置,当在终端输入python代表python3 #第六步:检测 python """ [email protected]:~$ python Python 3.5.2 (default, Nov 12 2018, 13:43:14) [GCC 5.4.0 20160609] on linux Type "help", "copyright", "credits" or "license" for more information. >>> """ """ 问题1:PermissionError: [Errno 13] 权限不够: '/usr/bin/pip' 解决方案:在命令前面添加sudo 问题2:如果更新后出现以下错误,这是pip 10.0.0版本的BUG Traceback (most recent call last): File "/home/rock/.local/bin/pip", line 7, in <module> from pip import main ImportError: cannot import name 'main' 解决方案:修改对应pip文件中的代码(pip和pip3类似) 例如:更新pip后报错则需要修改/home/自己的ubuntu用户名/.local/bin/pip文件中的代码,使用: sudo vim /home/自己的ubuntu用户名/.local/bin/pip 打开pip文件,做出如下修改: 将原来的: from pip import main if __name__ == '__main__': sys.exit(main()) 改成: from pip import __main__ if __name__ == '__main__': sys.exit(__main__._main()) 如果修改了上述内容还无法使用,则继续做出如下修改: 将原来的: from pip import main if __name__ == '__main__': sys.exit(main()) 改成: from pip._internal import main if __name__ == '__main__': sys.exit(main()) """
3.Python环境安装
注意:已经安装过的忽略 #第一步:查看当前python环境的版本 python --version #第二步:把python3设置为默认的 sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150 #第三步:列出可用的 Python 替代版本 update-alternatives --list python #第四步:在列出的 Python 替代版本中任意切换 update-alternatives --config python #第五步:再次查看python的版本 python --version #第六步:进入python环境,验证python环境是否安装成功 python #第七步:退出python环境 exit()
4.virtualenv和virtualenvwrapper安装
virtualenv【virtual environment】是用来创建Python的虚拟环境的库,虚拟环境能够独立于真实环境存在,并且可以同时有多个互相独立的Python虚拟环境,每个虚拟环境都可以营造一个干净的开发环境,对于项目的依赖、版本的控制有着非常重要的作用。
实质:虚拟环境相当于将真实环境拷贝了一份,相当于真实环境比较干净
虚拟环境的存在有什么意义?
如果我们要同时开发多个项目,一个项目需要Django1.11,另外一个项目需要Django1.8,每个项目可能需要一个独立的开发环境,就需要通过虚拟环境完成,两个项目开发过程中完全互不影响的
总之,虚拟环境是为了使得不同版本的环境并存,避免不同的环境之间相互影响
virtualenv:用来搭建一个虚拟环境
注意:有了虚拟环境之后,尽量使用虚拟环境,不要真实环境
虚拟环境对于Django开发是不是必须的?
不是必须的,只是使用Django的某一个版本则完全可以
#[使用普通用户操作] #第一步:安装虚拟环境 sudo apt update #更新apt sudo pip3 install virtualenv virtualenvwrapper """ 问题说明 1.上面的命令也可以分开执行: sudo pip3 install virtualenv sudo pip3 install virtualenvwrapper 2.如果遇到超时问题或者下载很慢的问题:可以使用豆瓣资源 pip3 install virtualenvwrapper -i https://pypi.douban.com/simple """ #第二步:配置虚拟环境的环境变量 安装后如果不能使用虚拟环境命令,则需要配置环境变量 1.进入家目录: cd ~ 2.使用vim打开.bashrc, 定位到文件最后:shift+g,并添加以下2行代码[注意:修改自己Ubuntu的用户名] export WORKON_HOME=/home/自己Ubuntu的用户名/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh 3. 在家目录创建.virtualenvs目录: mkdir .virtualenvs 4. 加载修改后的设置,使之生效:source .bashrc """ 问题说明: 1.如果添加上面两行还不行,则可以尝试将上面两行换成下面两行: export WORKON_HOME=/home/自己Ubuntu的用户名/.virtualenvs source /home/自己Ubuntu的用户名/.local/bin/virtualenvwrapper.sh 也可以换成下面两行: export WORKON_HOME=$HOME/.virtualenvs source /usr/local/bin/virtualenvwrapper.sh 2.如果还出现如下的错误 /usr/bin/python: No module named virtualenvwrapper virtualenvwrapper.sh: There was a problem running the initialization hooks. If Python could not import the module virtualenvwrapper.hook_loader, check that virtualenvwrapper has been installed for VIRTUALENVWRAPPER_PYTHON=/usr/bin/python and that PATH is set properly. 解决办法: a.修改 /etc/profile 文件,在文件末尾加上如下两行代码 VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3 export VIRTUALENVWRAPPER_PYTHON b.使得修改生效 source /etc/profile """ #第三步:创建虚拟环境并进入到虚拟环境 #默认为python2.7的环境,env_name是虚拟环境的名字,任意设置,没有限制,最好是合法的标识符【英文 或者 英文+数字】 #但是,如果前面执行了sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150,则此处创建的是就是python3的虚拟环境 mkvirtualenv env_name #mkdir """ 问题说明:如果前面没有执行sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 150,则需要分开设置python2和python3的环境 创建python2的虚拟环境:mkvirtualenv env 创建python3的虚拟环境:mkvirtualenv env2 -p /usr/bin/python3 (指定python路径) """ #第四步:退出虚拟环境 deactivate #第五步:进入虚拟环境 workon 虚拟环境名称 #第六步:删除虚拟环境 rmvirtualenv 虚拟环境名称 #第七步:查看当前系统中有哪些虚拟环境 workon
二、Django安装和卸载
1.安装
Django作为Python Web的框架,需要Python支持
Django和Python的版本匹配如下:
Django 1.5.x 支持 Python 2.6.5 Python 2.7, Python 3.2 和 3.3. Django 1.6.x 支持 Python 2.6.X, 2.7.X, 3.2.X 和 3.3.X Django 1.7.x 支持 Python 2.7, 3.2, 3.3, 和 3.4 (注意:Python 2.6 不支持了) Django 1.8.x 支持 Python 2.7, 3.2, 3.3, 3.4 和 3.5. (长期支持版本 LTS) Django 1.9.x 支持 Python 2.7, 3.4 和 3.5. 不支持 3.3 了 Django 1.10.x 支持 Python 2.7, 3.4 和 3.5. Django 1.11.x 支持 Python 2.7, 3.4, 3.5 和 3.6(长期支持版本 LTS) 最后一个支持 Python 2.7 的版本 #目前是最稳定的版本 Django 2.0.x 支持 Python 3.4, 3.5 和 3.6 (注意,不再支持 Python 2) #注意:一般情况下,选择长期支持版本比较好
前提:创建并进入虚拟环境后,在虚拟环境下安装Django
执行下面的命令:
练习:新建一个虚拟环境,在其中安装django#第一步:切换到虚拟环境下 workon 虚拟环境名称 #第二步:安装Django pip install django==1.11 #注意:切换到虚拟环境下,该命令的前面就尽量不要添加sudo,会将Django安装到真实环境下 #注意:其实可以通过pip install django安装,但是,默认会直接安装最新版本,一般情况下,需要指明你想使用版本号 #注意:写版本号的时候,一定要使用== #第三步:进入python环境 python #第四步:测试Django是否安装成功 import django django.get_version() 或者 django.VERSION """ 如果import django,出现如下错误,则说明django未安装成功 >>> import django Traceback (most recent call last): File "<stdin>", line 1, in <module> ImportError: No module named 'django' 说明未安装成功 """ #第五步:quit() 或者 exit() 可以退出Python环境 #第六步:pip freeze查看新安装的包
2.卸载
如果要从以前的版本升级Django的安装,则需要在安装新版本之前卸载旧的Django版本。#第一步:找到django安装路径 python -c "import django; print(django.__path__)" #第二步:删除目录 rm -rf xxx 强制删除 ['/usr/local/lib/python3.5/dist-packages/django'] #第三步:重新安装 pip install django==xxx
三、Django介绍
1.概述
Django 是用Python开发的一个免费开源的Web框架。它最初是被开发来用于管理劳伦斯出版集团旗下的一些以新闻内容为主的网站的。
Web开发分为前端和后端【后台】,前端和后端之间的关系:见图
Django的主要目标是使得开发复杂的、数据库驱动的网站变得简单。Django注重组件的重用性和“可插拔性”,敏捷开发和DRY法则(Don’t Repeat Yourself)。在Django中Python被普遍使用,甚至包括配置文件和数据模型。
Django的本质:基于Python,填空或者修改为你想要的样式
我们为什么需要框架:
避免在开发过程中重复造轮子!
站在众人的肩膀上,可以看的更远!
Django官网:https://docs.djangoproject.com/en/1.11/intro/tutorial01/
2.组件
2.1核心框架
Django框架的核心包括:一个面向对象的映射器(ORM),用作数据模型(以Python类的形式定义)和关系性数据库间的媒介;一个基于正则表达式的URL分发器;一个视图系统(View),用于处理请求;以及一个模板系统(Template)
核心框架中还包括:
- 一个轻量级的、独立的Web服务器,用于开发和测试。
- 一个表单序列化及验证系统,用于HTML表单和适于数据库存储的数据之间的转换。
- 一个缓存框架,并有几种缓存方式可供选择。
- 中间件支持,允许对请求处理的各个阶段进行干涉。
- 内置的分发系统允许应用程序中的组件采用预定义的信号进行相互间的通信。
- 一个序列化系统,能够生成或读取采用XML或JSON表示的Django模型实例。
- 一个用于扩展模板引擎的能力的系统。
2.2框架模式
Django采用了MVC的设计模式,也有很多人把它称为MVT【或者MTV】模式
MVC:
M:Model,模型,用于封装和应用程序有关的数据逻辑处理
V:View,视图,负责数据的显示,对用户的直接输出
C:Controller,控制器,负责从用户端收集用户的输入,可以看成view的反向功能,主要处理用户交互
好处:降低耦合度,将数据和界面分离
MTV/MVT:
注意:和MVC没有差别,在定义上有差别
M:Model,模型,用于封装和应用程序有关的数据逻辑处理
V:view,视图,负责数据的显示,对用户的直接输出
T:Template,界面模板,负责将页面展示给用户
一个基于正则表达式的URL分发器:url也被称为路由,主要用来将一个个页面的请求分发给不同的view,view再调用相应的Model和Template
路由:根路由,子路由,见图
3.内置应用
Django 包含了很多应用在它的”contrib”包中,这些包括:
- 一个可扩展的认证系统
- 动态站点管理页面
- 一组产生RSS和Atom的工具
- 一个灵活的评论系统
- 产生Google站点地图(Google Sitemaps)的工具
- 防止跨站请求伪造(cross-site request forgery)的工具
- 一套支持轻量级标记语言(Textile和Markdown)的模板库
- 一套协助创建地理信息系统(GIS)的基础框架
4.服务的部署
Django可以运行在启用了mod python的Apache 2上,或是任何WSGI兼容的Web服务器。Django也有启动FastCGI服务的能力,因此能够应用于任何支持FastCGI的机器上。
下列数据库引擎被Django官方支持:
- PostgreSQL
- MySQL
- SQLite
- Oracle
5.学习Django必备的知识
Python基础
前端相关知识(看个人兴趣,了解一些也挺好的)
Linux 基础命令
数据库,缓存等相关知识
HTTP协议相关内容
网络相关知识(TCP/IP协议)
算法,数据结构等知识(基本的数据结构和算法要会)
操作系统原理等
四、Django使用
1.创建第一个Django项目
#第一步:切换到虚拟环境下 workon 虚拟环境名称 #第二步:查看当前环境中的包 pip freeze #第三步:进入到指定要存放项目的目录 cd xxxx #第四步:执行命令,来创建一个名字为xxx的工程 django-admin startproject xxx #xxx表示项目的名称,需要是合法的Python标识符,比如:不要使用1a,a-b #注意:django-admin命令不可行的话,则可以使用django-admin.py #第五步:查看一下目录结构 ls 或者 tree
查看默认目录结构: HelloDjango子目录:一些项目的设置 __init__.py: 告诉python该目录是一个python包,暂无内容,后期一些工具的初始化可能会用到 #python包的目录结构是必须的,与调用无关 settings.py: Django项目的配置文件,默认状态其中定义了本项目引用的组件,项目名,数据库,静态资源等。 urls.py: 维护项目的URL路由映射,即定义当客户端访问时由哪个模块进行响应。 #总的配置文件【根路由】 wsgi.py: 定义WSGI的接口信息,主要用于服务器集成,通常本文件生成后无需改动。 #部署服务器会用到 manage.py: 是Django用于管理本项目的命令行工具,之后进行站点运行,数据库自动生成等都是通过本文件完成。 详细解释: #__init__:表示当前目录是一个包 #settings.py,打开文件 1》通过运行解释BASE_DIR表示当前工程路径【BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))】 2》DEBUG = True,DEBUG一般情况下为True,等部署上线的时候会改为False 3》ALLOWED_HOSTS = [],表示被允许的主机【ip地址】 4》NSTALLED_APPS,表示已经安装的app,有一些默认的 5》MIDDLEWARE表示中间件 6》ROOT_URLCONF表示根路由,一般根据当前项目默认 7》TEMPLATES表示模板,目前是默认的,后期可能会修改DIRS 8》DATABASES表示数据库,测试的时候使用django.db.backends.sqlite3【轻量级数据库】,部署的时候使用mysql 9》'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),拼接的是db.s1lite3的路径 10》TIME_ZONE = 'UTC'表示时区,使用格林尼治时间 #urls.py urlpatterns = [ url(r'^admin/', admin.site.urls), ] urlpatterns表示正则【regular expression】,很重要,表示路由,使用正则表达式匹配,会跳转到指定的路径 #wsgi.py 后期做项目部署的时候会用到
2.测试服务器的启动
此处的服务器指的是开发服务器,就是在开发时使用
特点:修改代码会自动重启,主要用来开发和调试,但是由于性能问题,建议只用来测试,不要用在生产环境
#第一步:cd到django项目目录下 cd xxx #第二步:启动服务器 python manage.py runserver #注意:也可以指定ip地址和端口号,python manage.py runserver ip:port #第三步:检测服务器是否启动 在浏览器中访问:http://localhost:8000 或者 http://127.0.0.1:8000 #默认的端口为8000, #第四步:请尝试着记住Django最基本的命令,如果忘记命令,可以执行下面命令查看 python manage.py
3.数据迁移
#创建django项目 #第一步:在真实环境中,查看有哪些虚拟环境 workon #第二步:进入虚拟环境 workon xxx #第三步:查看当前虚拟环境中是否安装Django pip freeze #第四步:切换到指定目录下 cd xxx #第五步:创建一个名称为xxx的Django工程 【HelloDjango】 django-admin startproject xxx #第六步:启动服务器 python manage.py runserver #第七步:检测服务器是否启动 在浏览器中输入http://127.0.0.1:8000 或者 http://localhost:8000 #第八步:可以修改端口号 使用python manage.py runserver 8888 #端口号的取值范围:0~65535,0~1024属于公认端口,尽量使用四位数,以8开头的 #第九步:可以修改ip地址 #监听机器的所有可用的ip python manage.py runserver 0.0.0.0:8888 #一般简化为:python manage.py runserver 0:8888 """ 问题说明: 问题:Error: That port is already in use. 表示端口号已经被占用,说明servr已经在运行了,找到该进程,kill掉即可. 解决方案: 方式一:杀死进程 a.执行命令查看当前进程:ps aux | grep -i manage b.找到rock 7326 0.0 1.6 165964 34028 pts/18 Tl 20:58 0:00 /home/rock/.virtualenvs/env1/bin/python manage.py runserver 0.0.0.0:8888,其中的7326就是进程号 c.执行命令杀死进程:kill -9 7326 d.再去执行python manage.py runserver 0:8888就可以了 #方式二:更换端口 python manage.py runserver xxx """ #第十步:在浏览器中使用http://127.0.01:8888访问 问题提示:需要将修改之后的ip地址添加到settings.py文件中的ALLOWED_HOSTS中 解决方案:此时需要将settins文件中的ALLOWED_HOSTS = []改为ALLOWED_HOSTS = ["*"],*表示通配符 #效果:其他的电脑就可以访问当前的电脑 #第十一步:打开数据库可视化工具 #第十二步:数据迁移 #数据迁移:就是将模型映射到数据库的过程 生成迁移:python manage.py makemigrations 执行迁移:python manage.py migrate
4.创建应用【app】
项目【project】和应用【App】之间的关系:一个项目可以包含多个应用,一个应用也可以被应用在多个项目中
注意:
a.执行python manage.py startapp appname,必须要在manage.py文件所在的目录下执行该命令
b.创建好的应用在使用之前,需要将其在settings.py文件中INSTALLED_APPS进行注册
#第一步:创建app cd 项目目录下 python manage.py startapp appname #选中工程根目录,在Terminal中执行上述命令,就会在项目目录下生成一个appname的目录 #应用目录介绍 migrations包:自动生成,用于生成迁移文件的 __init__.py:其中暂无内容,使得app成为一个包 admin.py:管理站点模型的声明文件,默认为空 #后台,Django中可以用少量的代码拥有一个强大的后台 tests.py:测试代码文件,可以做单元测试 apps.py:应用信息定义文件,在其中生成了AppConfig,该类用于定义应用名等数据 models.py:添加模型层数据类文件,MVC和MVT中的M #与数据库操作有关,存入和读取数据用到该文件 views.py:定义URL相应函数(路由规则),MVC和MVT中的V,其中会定义视图函数 #定义视图函数,处理用户发出的请求, #需要自定义 urls.py:网址入口,关联到对应的views.py中的一个函数,访问网址就对应一个函数。 templates文件夹:按道理还有这个文件,表示MVT中的,该文件需要手动创建 #其中书写html文件
5.基本视图
练习:新建一个应用showtime,每次刷新页面显示不同的当前时间#接着上面创建应用的操作 #第二步:修改settings.py文件 #第36行在INSTALLED_APPS中添加自己app的名称 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'app', ] #第三步:修改二级目录下的urls.py文件 #添加include模块 from django.conf.urls import url,include from django.contrib import admin urlpatterns = [ url(r'^admin/', admin.site.urls), url(r"^app/",include("app.urls")), ] #第四步:在app目录下创建一个python file 命名为urls.py #第五步:在app目录下的urls.py文件中,添加内容 from django.conf.urls import url from app.views import hello 或者 from app.views import * urlpatterns = [ url(r"^hello/",hello) ] #第六步:在views.py文件中,添加内容 #默认存在的 from django.shortcuts import render #需要手动添加的 from django.http import HttpResponse # Create your views here. def hello(request): return HttpResponse("hello Django") #第七步:启动django服务器 python manage.py runserver """ 问题说明:可能会出现端口被占用的情况,解决办法在前面 """ #第八步:在浏览器中使用http://127.0.0.1:8000/访问 #第九步:如果要有其他的子路由,还可以继续添加 #1.app.urls.py文件 urlpatterns = [ url(r"^hello/",hello), url(r"^abc/",abc), ] #2.app.views.py文件 def hello(request): return HttpResponse("hello Django") def abc(request): return HttpResponse("abc abc") #第十步:在浏览器中就可以通过 http://127.0.0.1:8000/app/hello/和 http://127.0.0.1:8000/app/abc/访问
6.基本模板
模板实际上就是我们用HTML写好的页面
7.定义模型
#Django 模型是与数据库相关的,与数据库相关的代码一般写在 models.py 中,Django 支持 sqlite3, MySQL, PostgreSQL等数据库 #在Django中定义模型,只需要在models.py 中引入Djang自带的models,from django.db import models【models.py文件中已经默认导入】 #案例: 使用模型定义班级,并在模板上显示班级列表 table : grade columns: 班级名称 - name 成立时间 - date 女生人数 - girlnum 男生人数 - boynum 是否删除 - is_delete
8.Admin 后台管理
#第一步:启动服务器 python manage.py runserver #第二步:在浏览器中使用http://127.0.0.1:8000/admin访问 #第三步:退出服务器 ctrl + c #第四步:创建用户和密码 python manage.py createsuperuser #温馨提示:如果忘记用户名和密码,用户名可以查看,密码则可以通过命令python manage.py changepassword username修改 #第五步:查看数据库中的表,其中就多了个一个admin的用户,密码是加密的 #第六步:再次启动服务器,在浏览器中使用http://127.0.0.1:8000/admin访问,使用上一步创建的用户名和密码登录 #第七步:在admin.py文件中添加内容 from django.contrib import admin from .models import Grade # Register your models here. #在后台管理页面中注册Xxxx,后台则可以管理Xxxx,Xxxx表示继承自models.Model的类名 admin.site.register(Xxxx)