在接触python框架学习之前,首先要清楚我们做项目的基本架构,项目组以及公司的基本分类。下面我简单做一下梳理,仅供参考。
1.项目组
(1)产品---2个人,提需求(女生为主)
(2)测试-----1-2人,功能测试
(3)前端-----写页面,调用后端提供的数据
(4)后端----2人以上,获取数据,返给前端
(5)UI----设计页面,1人
(6)DBA(数据库管理)---大型公司会有单独岗
(7)运维---系统的运行维护
2.公司分类
(1)业务公司:重视结果,不重视过程。业务占用时间比技术学习占用时间要多。
(2)技术型公司:e.g知道创于、云和恩墨
(3) 销售型公司:程序员较少,技术变动比较少
所谓Web框架,就是用于开发Web服务器端应用的基础设施(通常指封装好的模块和一系列的工具)。web框架可以快速的开发一个网站
python主流web框架
Django、Flask 、 sanic(更强大)、web.py 、tornado(多用于并发) 、 twisted
、Pyramid、Bottle、Web2py等 。这里我会着重对Django和Flask的知识进行讲解
用来做网站,包括前后分离或者前后合在一起,在基于Python的Web框架中,Django是所有重量级选手中最有代表性的一位,开发者可以基于Django快速的开发可靠的Web应用程序,因为它减少了Web开发中不必要的开销,对常用的设计和开发模式进行了封装,并对MVC架构提供了支持(MTV)。
注意:django 2.0需要python3.7版本支持
许多成功的网站和App都是基于Django框架构建的,国内比较有代表性的网站包括:知乎、豆瓣网、果壳网、搜狐闪电邮箱、101围棋网、海报时尚网、背书吧、堆糖、手机搜狐网、咕咚、爱福窝、果库等。
.M(model):模型,进行数据库存取,进行业务逻辑的判断,通过和数据库建立联系获取数据库数据
模型xxx中定义Tag字段,sort字段
V(view):视图就是页面,表现层,渲染给用户看的页面,根据业务逻辑选择不同的视图
C(controller):控制器,写业务逻辑层,从用户端收集用户的输入,将用户输入的指令和数据传递给业务模型
本质上和MVC没有区别
Model:负责业务与数据库(ORM)的对象,依然和数据库进行交互
view:负责业务逻辑并适当调用module和Template
Template 模板,就是页面:负责把页面渲染展示给用户
注意:Django中还有一个url分发器,也叫做路由,主要用于将url分发给不同的view进行处理
a.项目中最重要的一步不是代码而是对业务逻辑的理解!
b.MVT和MVC模式的核心思想----解耦(面试高频考点),解耦的思想更容易实现代码重用,将复杂的东西拆开,降低各个模块之间的耦合度
当电脑中有多个python版本的时候,若不同项目用python不同的版本,存在项目代码兼容性问题。所以需要搭建环境,做项目的时候要将环境和代码分开,环境是环境,代码是代码,尽量不要用pycharm来创建。
注意:pip默认是python2,如果用python3则为pip3
(1)pip3 list
查看安装的所有包
C:\Users\Administrator>pip3 list
(2)pip3 freeze
查看pip安装过的包
C:\Users\Administrator>pip3 freeze
asn1crypto==0.24.0
cffi==1.11.5
cryptography==2.3
idna==2.7
pycparser==2.18
PyMySQL==0.9.1
redis==2.10.6
virtualenv==16.0.0
python 3中会自动配置好path
python2.X版本:需要在系统高级配置中设置Path
#在控制台查看
C:\Users\Administrator>python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:04:45) [MSC v.1900 32 bit (Intel)]
on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
命令:pip3 install virtualenv
C:\Users\Administrator>pip3 install virtualenv
Collecting virtualenv
Downloading https://files.pythonhosted.org/packages/b6/30/96a02b2287098b23b875
bc8c2f58071c35d2efe84f747b64d523721dc2b5/virtualenv-16.0.0-py2.py3-none-any.whl
(1.9MB)
11% |███▊ | 225kB 2.4kB/s eta 0:12:00
安装成功后显示
Installing collected packages: virtualenv
Successfully installed virtualenv-16.0.0
常用参数说明cmd中输入指令virtualenv:
-h, --help show this help message and exit
-v, --verbose Increase verbosity.
-q, --quiet Decrease verbosity.
-p PYTHON_EXE, --python=PYTHON_EXE
The Python interpreter to use, e.g.,
--python=python3.5 will use the python3.5 interpreter
to create the new environment. The default is the
interpreter that virtualenv was installed with (c:\use
rs\administrator\appdata\local\programs\python\python3
6-32\python.exe)
--clear Clear out the non-root install and start from scratch.
--no-site-packages DEPRECATED. Retained only for backward compatibility.
Not having access to global site-packages is now the
default behavior. #常用
--system-site-packages
Give the virtual environment access to the global
site-packages.
--always-copy Always copy files rather than symlinking.
--relocatable Make an EXISTING virtualenv environment relocatable --no-setuptools Do not install setuptools in the new virtualenv.
--no-pip Do not install pip in the new virtualenv.
--no-wheel Do not install wheel in the new virtualenv.
--extra-search-dir=DIR
Directory to look for setuptools/pip distributions in.
This option can be used multiple times.
--download Download preinstalled packages from PyPI.
--no-download, --never-download
Do not download preinstalled packages from PyPI.
--prompt=PROMPT Provides an alternative prompt prefix for this
environment.
--setuptools DEPRECATED. Retained only for backward compatibility.
This option has no effect.
--distribute DEPRECATED. Retained only for backward compatibility.
This option has no effect.
--unzip-setuptools DEPRECATED. Retained only for backward compatibility.
This option has no effect.
安装好虚拟环境后,可以将环境和代码分开,实际开发中我习惯将环境和代码分开,创建单独文件夹,环境是环境env,代码是代码wordspace,目录中不要有中文和空格.
#直接输命令
C:\Users\Administrator>virtualenv
平时要单独建环境文件夹、代码文件夹能用代码命令完成的尽量用代码操作,用英文路径
#【cmd命令回顾】
- 进入文件夹===cd 文件名
- 查看当前目录内容====dir
- 返回上一级目录=== cd ..
- 返回上两级目录===cd ../../
- 返回上三级目录===cd ../../../
- 回到根目录 ==== cd/
- c盘切换到d盘====d:+回车
- shift+右键在此处打来命令===可在指定文件夹中打开命令
- 清屏==ls
(1)建文件命名为env,创建django环境===virtualenv --no-site-packages
这里文件位置选择 D:\PythonFile\env----->进入文件夹右击打开命令提示,开始安装包
包命名为djangoenv
D:\PythonFile\env>virtualenv -p D:Python3\python.exe --no-site-packages djangoenv
#这样安装的可以指定对应的python版本,为指定的python版本来安装虚拟环境
#代表运行的时候没有其他的包
也可以不带-p和python安装地址,这样会默认当前的python版本
D:\PythonFile\env>virtualenv --no-site-packages djangoenv #代表运行的时候没有其他的包
状态:
Using base prefix 'c:\\users\\administrator\\appdata\\local\\programs\\python\\p
ython36-32'
New python executable in D:\PythonFile\env\djangoenv\Scripts\python.exe
Installing setuptools, pip, wheel...done.
(2)安装成功查看文件
D:\PythonFile\env>dir
驱动器 D 中的卷是 软件
卷的序列号是 948F-4A3C
D:\PythonFile\env 的目录
2018/08/06 11:37 .
2018/08/06 11:37 ..
2018/08/06 11:37 djangoenv
0 个文件 0 字节
3 个目录 27,002,458,112 可用字节
(3)进入Scripts文件夹,activate激活虚拟环境
【windown命令】
activate==进入虚拟环境
deactive===退出虚拟环境
【Ubantu命令】
进入 cd env/Scripts/文件夹 在activate命令
退出 deactivate
//进入文件夹
D:\PythonFile\env>cd djangoenv
//进入Script文件
D:\PythonFile\env\djangoenv>cd Scripts
//激活,证明此时进入了虚拟环境
D:\PythonFile\env\djangoenv\Scripts>activate
(4)查看列表==pip list
激活虚拟环境会自动弹出(djangoenv) D:\PythonFile\env\djangoenv\Scripts>,输入pip list可查看当下安装列表
查看安装列表
(djangoenv) D:\PythonFile\env\djangoenv\Scripts>pip list
Package Version
---------- -------
pip 18.0
setuptools 40.0.0
wheel 0.31.1
注意在虚拟环境中查看和在全局中(退出虚拟环境后)查看pip list看到的内容是不一样的,虚拟环境中刚运行默认只有这三项内容
(5)虚拟环境中安装库(django库、pymysql)
cmd控制台进入虚拟环境D:\PythonFile\env\djangoenv\Scripts>activate
输入命令分别安装django和pymysql
pip install Django==1.11
pip install pymysql
1.准备工作:
(1)虚拟环境中安装库(django库、pymysql等)
cmd控制台进入虚拟环境D:\PythonFile\env\djangoenv\Scripts>activate
输入命令分别安装django和pymysql
pip install Django==1.11 #如果没有指定版本,直接pip install Django默认安装最新版本
pip install pymysql
(2)在env同级目录下创建代码文件夹wordspace,子文件命名django(代表存储django代码)
注:工作中一定要代码环境有条理分开,这已经强调过多次了
2.从虚拟环境切换到wordspace—>django文件夹
返回到虚拟环境的同级目录
djangoenv) D:\PythonFile\env\djangoenv\Scripts>cd ../../../
路径:用cd命令一层层进入到新建的wordspace文件件
(djangoenv) D:\>cd pythonfile
3.创建Django项目====django-admin startproject +文件名
要使用这个命令前提一定要django安装成功了,没有安装django是没有这个命令的
(djangoenv) D:\PythonFile\Third\wordspace\django>django-admin startproject day01
创建完可以通过dir命令查看目录,会看到下面已经创建好了day01文件
(djangoenv) D:\PythonFile\Third\wordspace\django>dir
驱动器 D 中的卷是 软件
卷的序列号是 948F-4A3C
D:\PythonFile\Third\\django 的目录
2018/08/07 20:11 .
2018/08/07 20:11 ..
2018/08/06 16:20 day01
4.pycharm中设置环境,实现项目和环境绑定
注意:上面创建项目的步骤也可以在pycharm中操作,推荐使用上面的操作直接在cmd黑屏中端中操作
(1)pycharm软件中打开建立的新项目day01
File--> open-->找到目标文件夹day01--->ok-->选择open in current window
(2)设置环境(添加刚创建的环境)
File-->setting-->project interpreter
在选项框中设置成刚才的环境文件,如果没有就找show all--->点击加号
(3)环境文件夹选择
在virtual Enviorment选择Existing enviorment(已存在的环境),选择刚才创建的虚拟环境中的pyrhon.exe文件
这样就将项目设定在对应 的虚拟环境上面了
File--> open-->找到目标文件夹day01--->ok-->选择open in current window
创建的项目day01文件夹里面还包含一个day01文件夹和manage.py,
其中里面的day01文件中包含四个python文件
day01
day01
__ init__.py
__ settings__.py
__ urls__.py
manage.py
下面对以上文件进行说明:
(1)init.py
: 指明该目录结构是一个python包,空文件,暂无内容,在后期会初始化一些工具会使用到。
例如数据库配置
# 项目使用MySQL数据库,需要将数据库初始化进行和mysql的链接
import pymysql
pymysql.install_as_MySQLdb()
(2)manage.py
:一个让你用各种方式管理 Django 项目的命令行工具, 是Django用于管理本项目的管理集工具,之后站点运行,数据库自动生成,数据表的修改等都是通过该文件完成。
teminal控制台可查看其中命令
wordspace\django\day01>python manage.py
【部分命令演示】===python manage.py runserver
Django version 1.11, using settings 'day01.settings'
Starting development server at http://127.0.0.1:8000/
Quit the server with CTRL-BREAK.
(3)settings.py
: Django项目的配置文件,其中定义了本项目的引用组件,项目名,数据库,静态资源,调试模式,域名限制等
DEBUG = True #当为True是打开http://127.0.0.1:8000/可以看到网页报错时的内容信息
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'hello', #将app名字添加上,这里假设创建的app名字为hello,就需要添加过来
]
#模板设置
TEMPLATES = ['BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [], # =======放页面的存放位置
'APP_DIRS': True,=
#数据库设置 ,需要先在mysql中建库,这里将数据库名字命名为django01
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', #改为mysql
'NAME': 'django',
'USER': 'root',
'PASSWORD': '123456',
'HOST': '127.0.0.1', #本地地址写法,也可以写成localhost
'PORT': 3306
}
}
# 语言配置(英语、汉语)
# LANGUAGE_CODE = 'en-us' 这是英语
LANGUAGE_CODE = 'zh-hans' 这是汉语
# UTC时区设置
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
(3)urls.py
:项目的URL路由映射,就像你网站的“目录” ,实现客户端请求url由哪个模块进行响应。
(4)wsgi.py
:定义WSGI接口信息,通常本文件生成后无需改动
案例说明:
案例实现效果: 运行网页,让网页返回hello world
执行原理: 先接收到url请求,通过工程看到当前的url对应的是什么视图(views)和视图下的方法去处理的
pycharm软件中打开建立的新项目day01
准备:
(1)先确保环境没有问题runserver运行一下
(2)设置runserver启动端口
在Terminal的虚拟环境中执行命令python manage.py startapp
(名字自定义取)
(1)创建app
#在day01下面创建一个app命名为hello
python manage.py startapp hello
此时会自动创建出一个hello文件夹,里面包含了多个python文件
(2)app文件说明
app下包含一个文件夹和多个文件,其中migrations文件夹和apps.py作用不大,models.py和view.py最重要
a.migrations文件夹
#migrations文件夹
_ _init_ _.py
_ _init_ _.py
admin.py
apps.py
models.py
tests.py
views.py
b.admin.py
管理模型,django提供了一个管理后台(通常工作中用的不多),admin文件的操作在后台都能看到
进入后台看效果
(1)先在terminal控制台输入python manage.py runserver
会显示出http://127.0.0.1:8000/地址
(2)网页中打开网址,并在url中输入admin可以查看到Django后台
http://127.0.0.1:8000/admin
c.apps.py
用处不大
d.model.py :
定义模型的地方
e.tests.py
是初始案例,做测试的(后面会讲到)
f.views.py
写业务逻辑的地方,创建自己的视图函数
(1)在view中定义了一个hello的方法。这个方法返回的是hello world
(2)参数为request请求,否则报错,请求中设置GET方法,一般网页访问都用GET请求
(3)发出请求返回东西的时候需要加HttpResponse,用之前需要先在上面导入一下包,否则报红线错误,快捷键alt+Enter提示
# 这句命令是该文件中原有的,自动生成的语句
from django.shortcuts import render
#导入HttpResponse包
from django.http import HttpResponse
# 在view中定义了一个hello的方法。参数为request,这个方法返回的是hello world
def hello(request):
if request.method == 'GET':
return HttpResponse('hello world')
就相当于是路由,目的是当我访问url中hello的时候,要找到view中的方法。
#导入django信息
from django.conf.urls import url
from django.contrib import admin
#从hello中导入views
from hello import views
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'hello/',views.hello) , # 目的是当我访问url中hello的时候,要找到view中的方法
]
定义了路由之后所以在网址输入的时候就应该是 http://127.0.0.1/hello,
打开这个网页后返回的内容就应该是views文件中hello方法中内容
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'hello', #写上上文创建的APP名可以将创建的hello加载进来
]
#还可以修改语言和时区时间
LANGUAGE_CODE = 'en-us' #改为中文'zh-han'
TIME_ZONE = 'UTC' #改为'Asia/Shanghai'中国时间
USE_I18N = True
USE_L10N = True
USE_TZ = True
(1)在terminal控制台输入python manage.py runserver
,找到运行网址
(2)打开网页,url中输入默认地址+hello
http://127.0.0.1:8000/hello会显示结果
打开运行控制台defauit,配置如下参数
script path =找到对应的项目中的manage.py文件
Parametersrunserver
改端口;在刚才的runserver后面可以加端口
Parameters====runserver 8080 代表指定8080端口
电脑先要启动Mysql,windows 的cmd中输入net start mysql57
在应用网址后面输入admin可以进入管理后台,我们只需要创建用户名和密码就可访问
url中输入
http://127.0.0.1:8080/admin
seting.py
中配置数据库要想设置用户名和密码就需要数据,这里就要用到数据库,在setting.py文件中DATEBASES设置
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', #将默认的sqlite 改为mysql
'NAME':'django01' , #数据库名,不会自动生成,需要在mysql中创建
# 默认一般都是root
'USER':'root',
'PASSWORD':'123456', #设置密码
'HOST':'localhost', # 能访问的数据库地址,本地就写localhost
'PORT':3306, # 端口名
}
}
# 语言配置(英语、汉语)
# LANGUAGE_CODE = 'en-us'
LANGUAGE_CODE = 'zh-hans'
# UTC时间设置
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
右击”新建数据库“设置数据库名、字符集、排序规则
注意:数据库名字命名没有硬性要求但是要和Python中数据库设置一致
数据库名 django01
字符集 utf8--UTF-8 Unicode
排序规则 utf8_general_ci
工程目录下init文件中
在python3中必须有这一步操作,如果没有安装pymysql先安装pip install pymysql 在进行下列操作
import pymysql
pymysql.install_as_MySQLdb()
用户名和密码都是在表中,有了数据库我们还要为数据库创建表,这里不在nivicat中直接创建,在python中创建
(1)生成迁移文件
python manage.py makemigrations
注意:如果执行后并没有生成迁移文件,一直提示No changes detected这个结果的话,就要手动的去处理了。有这几种处理方式:
a) 先删除掉pycache文件夹
b) 直接强制的去执行迁移命令,python manage.py makemigrations xxx (xxx就是app的名称)
c) 查看自动生成的数据库,查看表django_migrations,删掉app字段为xxx的数据(xxx就是app的名称)
(2)执行迁移生成数据库
python manage.py migrate
注意: 生成迁移文件的时候,并没有在数据库中生成对应的表,而是执行migrate命令之后才会在数据库中生成表。用户名和密码都是在表中。
执行完毕刷新数据库中4day01中的表会生成Django自带的表(10个表)
auth_group
auth_group_permission
auth_permission
auth_user #用来存储后台登录的用户名和密码
auth_user_groups
auth_user_user_permission
django_admin_log
django_content_type
django_migrations #用来记录迁移的账户和密码
django_session
(1)在terminal中执行命令
创建超级用户,用来设置用户名和密码
python manage.py createsuperuser
(2)设置信息
输入用户名、邮箱、密码,注意密码不能全数字,要大于8个字符
python manage.py createsuperuser
Username (leave blank to use 'administrator'): admin #这里用户名命名admin
Email address: [email protected] #邮箱随意
Password: #密码输入无回显这里设置12345678a
Password (again):
此时创建的账户和密码设置在数据库的uer表中
控制台运行命令
python manage.py runserver
浏览器中进入http://127.0.0.1:8000/admin/
通过对模型的操作,实现操作Mysql数据库(不写sql语句在django后台实现对数据库的信息crud操作)
(1)定义一个模型
from django.db import models
# 定义一个模型
class Student(models.Model):
#模型中两个字段s_name和s_age
s_name = models.CharField(max_length=10, unique=True)
s_age = models.IntegerField(default=16)
#定义模型中数据库的表名,如果不定义表名则生成表名字默认是appname
class Meta:
db_table = 'student'
(2)进行数据迁移
python manage.py makemigrations
python manage.py migrate
此时在本地数据库中刷新数据库,会自动生成一个student表,里面有s_name,s_age字段
下面定义的四个方式可以分别进行测试,查看效果
from django.contrib import admin
from app.models import Student
class StudentAdmin(admin.ModelAdmin):
# 定义一个列表展示,此时后台的展示方式会添加这三个字段(如下图一)
list_display = ['id', 's_name', 's_age']
# 添加后台的过滤展示
list_filter = ['s_age', 's_name']
# 搜索,例如按照名字搜索
#search_fields = ('s_name')
# 分页
list_per_page = 2
admin.site.register(Student, StudentAdmin)
图一:字段
图二:过滤
图三:分页效果