Django高级进阶01--环境搭建和视图(修改版)
Python框架之Django01–环境搭建
一、一般公司结构简介
在接触python框架学习之前,首先要清楚我们做项目的基本架构,项目组以及公司的基本分类。下面我简单做一下梳理,仅供参考。
1.项目组
(1)产品---2个人,提需求(女生为主) (2)测试-----1-2人,功能测试 (3)前端-----写页面,调用后端提供的数据 (4)后端----2人以上,获取数据,返给前端 (5)UI----设计页面,1人 (6)数据库---大型公司会有单独岗
2.公司分类
(1)业务公司:可适当包装 (2)技术型公司:e.g知道创于、云和恩墨 (3) 销售型公司:程序员较少,技术变动比较少
二、Python主流框架
1.web框架
所谓Web框架,就是用于开发Web服务器端应用的基础设施(通常指封装好的模块和一系列的工具)。web框架可以快速的开发一个网站
2.python主流框架
Django、Flask 、 sanic(更强大)、web.py 、tornado(多用于并发) 、 twisted 、Pyramid、Bottle、Web2py等 。这里我会着重对Django和Flask的知识进行讲解
三、Django简介
1.Django、Flask简介:
用来做网站,包括前后分离或者前后合在一起 学习资料:GitHub;django官网,django 2.0需要python3.7版本支持
2.Django简介
在基于Python的Web框架中,Django是所有重量级选手中最有代表性的一位,开发者可以基于Django快速的开发可靠的Web应用程序,因为它减少了Web开发中不必要的开销,对常用的设计和开发模式进行了封装,并对MVC架构提供了支持(MTV)。许多成功的网站和App都是基于Django框架构建的,国内比较有代表性的网站包括:知乎、豆瓣网、果壳网、搜狐闪电邮箱、101围棋网、海报时尚网、背书吧、堆糖、手机搜狐网、咕咚、爱福窝、果库等。
四、MVC模式(大部分的框架模式)
1.M(model):模型,进行数据库存取,进行业务逻辑的判断,通过和数据库建立联系获取数据库数据
模型xxx中定义Tag字段,sort字段
V(view):视图就是页面,表现层,渲染给用户看的页面,根据业务逻辑选择不同的视图
C(controller):控制器,写业务逻辑层,从用户端收集用户的输入,将用户输入的指令和数据传递给业务模型
sql: select * from xxx where Tag = 热门 and sort =
项目中最重要的一步不是代码而是业务逻辑!!
2.核心思想—-解耦(面试高频考点)
更容易实现代码重用,将复杂的东西拆开,降低各个模块之间的耦合度
五、Django—-MVT模式
本质上和MVC没有区别
Model:负责业务与数据库(ORM)的对象,依然和数据库进行交互
view:负责业务逻辑并适当调用module和Template
Template 模板,就是页面:负责把页面渲染展示给用户
注意:Django中还有一个url分发器,也叫做路由,主要用于将url分发给不同的view进行处理
六、环境搭建
当电脑中有多个python版本的时候,若不同项目用python不同的版本,存在项目代码兼容性问题。所以需要搭建环境,做项目的时候要将环境和代码分开,环境是环境,代码是代码,尽量不要用pycharm来创建。
1.查看电脑中安装的所有包===pip3 list
C:\Users\Administrator>pip3 list
注意如果是pip默认是python2,如果是pip3默认是python3
2.查看pip安装过的包
命令
pip3 freeze
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
3.python环境变量设置
python 3中会自动配置好path python2.X版本:需要在系统高级配置中设置Path
设置好了在cmd控制台输入python会正常显示
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. >>>
4.windows中安装虚拟环境
命令: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.
5.环境和代码分开
安装好虚拟环境后,可以将环境和代码分开,创建单独文件夹,环境是环境env,代码是代码wordspace,目录中不要有中文和空格.文件夹创建见步骤7
6.运行虚拟环境—直接输名字
C:\Users\Administrator>virtualenv
7.创建虚拟环境文件夹env
平时要单独建环境文件夹、代码文件夹能用代码命令完成的尽量用代码操作,用英文路径
【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)安装成功查看文件===dir
D:\PythonFile\env>dir 驱动器 D 中的卷是 软件 卷的序列号是 948F-4A3C D:\PythonFile\env 的目录 2018/08/06 11:37 <DIR> . 2018/08/06 11:37 <DIR> .. 2018/08/06 11:37 <DIR> 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
七.创建Django项目
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 <DIR> . 2018/08/07 20:11 <DIR> .. 2018/08/06 16:20 <DIR> 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文件
这样就将项目设定在对应 的虚拟环境上面了
八、Django项目中各个文件的意义
1.pycharm软件中打开建立的新项目day01
File--> open-->找到目标文件夹day01--->ok-->选择open in current window
2.细说day01
创建的day01文件夹里面还包含一个day01文件夹和manage.py, 其中里面的day01文件中包含四个python文件
day01 day01 __ init__.py __ settings__.py __ urls__.py manage.py
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.
init.py: 指明该目录结构是一个python包,空文件,暂无内容,在后期会初始化一些工具会使用到。
seetings.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,= #数据库设置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', #改为mysql 'NAME': '4day01', 'USER': 'root', 'PASSWORD': '123456', 'HOST': '127.0.0.1', 'PORT': 3306 } } # 语言配置(英语、汉语) # LANGUAGE_CODE = 'en-us' 这是英语 LANGUAGE_CODE = 'zh-hans' 这是汉语 # UTC时区设置 TIME_ZONE = 'UTC' USE_I18N = True USE_L10N = True USE_TZ = True
urls.py:项目的URL路由映射,就像你网站的“目录” ,实现客户端请求url由哪个模块进行响应。
wsgi.py:定义WSGI接口信息,通常本文件生成后无需改动
九、案例:第一个view视图函数
效果:运行网页,让网页返回hello world
执行原理:先接收到url请求,通过工程看到当前的url对应的是什么视图(views)和视图下的方法去处理的,方法
1.创建项目
pycharm软件中打开建立的新项目day01
File--> open-->找到目标文件夹day01--->ok-->选择open in current window
准备:
(1)先确保环境没有问题runserver运行一下
(2)设置runserver启动端口
2.创建应用
在Terminal的虚拟环境中执行命令python manage.py startapp (名字自定义取)
【例】在day01下面创建一个app命名为hello
python manage.py startapp hello====》此时会自动创建出一个hello文件夹,里面包含了多个pythn文件
hello中包含的文件
migrations文件夹 _ _init_ _.py _ _init_ _.py admin.py apps.py models.py tests.py views.py
【文件说明】===model和view最重要
migrations文件夹:作用不大,可删可留
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
apps.py 用处不大
model.py 定义模型的地方
tests.py 是初始案例,做测试的(后面会讲到)
views.py写业务逻辑的地方,创建自己的视图函数
3.url.py中设置关联——将方法和url绑定在一起
就相当于是路由,目的是当我访问url中hello的时候,要找到view中的方法。
注意上面要导入!!
from django.conf.urls import url #导入django信息 from django.contrib import admin from hello import views #从hello中导入views urlpatterns = [ url(r'^admin/', admin.site.urls), url(r'hello/',views.hello) , # 目的是当我访问url中hello的时候,要找到view中的方法 ] 定义了路由之后所以在网址输入的时候就应该是 http://127.0.0.1/hello, 打开这个网页后返回的内容就应该是views文件中hello方法中内容
4.在view.py中定义方法(重要!!)
(1)在view中定义了一个hello的方法。这个方法返回的是hello world
(2)参数为request请求,否则报错,请求中设置GET方法,一般网页访问都用GET请求
(3)发出请求返回东西的时候需要加HttpResponse,用之前需要先在上面导入一下包,否则报红线错误,快捷键alt+Enter提示
from django.shortcuts import render # 这句命令是该文件中原有的,自动生成的语句 from django.http import HttpResponse #导入HttpResponse包 def hello(request): if request.method == 'GET': return HttpResponse('hello world') # 在view中定义了一个hello的方法。参数为request,这个方法返回的是hello world
5.在settings.py中设置===加载app
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'hello', #写上hello可以将我们的app加载进来 ]
还可以修改语言和时区时间
LANGUAGE_CODE = 'en-us' #改为中文'zh-han' TIME_ZONE = 'UTC' #改为'Asia/Shanghai'中国时间 USE_I18N = True USE_L10N = True USE_TZ = True
6.显示hello world
(1)在terminal控制台输入python manage.py runserver ,找到运行网址
(2)打开网页,url中输入默认地址+hello
http://127.0.0.1:8000/hello 会显示结果
【补充】设置runserver自动运行
打开运行控制台defauit script path =====找到对应的项目中的manage.py文件 Parameters====runserver
改端口
在刚才的runserver后面可以加参数
Parameters====runserver 8080 代表指定8080端口
十、超级用户创建(管理Django后台)
电脑先要启动Mysql,windows 的cmd中输入net start mysql57
1.如何访问
在应用网址后面输入admin可以进入管理后台,我们只需要创建用户名和密码就可访问
url中输入 http://127.0.0.1:8080/admin
2.设置数据库===seting.py中设置
要想设置用户名和密码就需要数据,这里就要用到数据库,在setting.py文件中DATEBASES设置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql',=====>后面改为mysql 'NAME':'4day01' , #名字命名为4day01 # 默认一般都是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
3.在navicat中创建数据库
右击”新建数据库“设置数据库名、字符集、排序规则
注意:**数据库名字命名没有硬性要求但是要和python中数据库设置一致**
数据库名 4day01 字符集 utf8--UTF-8 Unicode 排序规则 utf8_general_ci
4.初始化Mysql
工程目录下init文件中
在python3中必须有这一步操作,如果没有安装pymysql先安装pip install pymysql 在进行下列操作
import pymysql pymysql.install_as_MySQLdb()
5.迁移表==python manage.py migrate
用户名和密码都是在表中,有了数据库我们还要为数据库创建表,这里不在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
6.创建超级用户
(1)在terminal中执行命令
创建超级用户,用来设置用户名和密码
python manage.py createsuperuser
(2)设置信息
输入用户名、邮箱、密码,注意密码不能全数字,要大于8个字符
(djangoenv) D:\PythonFile\Third\wordspace\django\dayT>python manage.py createsuperuser Username (leave blank to use 'administrator'): admin #这里用户名命名admin Email address: 123@qq.com #邮箱随意 Password: #密码输入无回显这里设置12345678a Password (again):
此时创建的账户和密码设置在数据库的uer表中
7.登录后台
浏览器中进入http://127.0.0.1:8000/admin/
输入用户名和密码可登录Django后台
十一、定义模型管理后台
通过对模型的操作,实现操作Mysql数据库(不写sql语句在django后台实现对数据库的信息crud操作)
1.model.py中创建模型
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'
此时在本地数据库中刷新数据库,会自动生成一个student表,里面有s_name,s_age字段
2.admin.py中设置方法,控制后台显示内容
下面定义的四个方式可以分别进行测试,查看效果
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)
图一:字段
图二:过滤
图三:分页效果
- Flask高级应用01--环境搭建和实例化蓝图
- Django01-环境搭建
- Django安装与开发虚拟环境搭建01
- Python Django进阶教程(一)(高级视图和URL配置)
- Django进阶——高级视图和url配置
- Django blog - 01 -搭建Django博客开发环境
- Python+Django+Boostrap搭建个人Blog-Part01开发环境及安装
- Django学习日记01_环境搭建
- Django实战1-权限管理功能实现-01:搭建开发环境
- python环境搭建,pycharm的配置,django安装及MySQL数据库配置
- Unix环境高级编程环境搭建
- django(1) 环境搭建及常用命令
- Ubuntu搭建Django+Flup+Nginx环境
- hibernate01 环境搭建
- swoole新手教程01-环境搭建及扩展安装
- ubuntu下Django环境的搭建
- 【.Net Micro Framework PortingKit - 01】移植初步:环境搭建
- django环境搭建
- JAVA基础-01(环境搭建,配置path环境变量)