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)

图一:字段

这里写图片描述

图二:过滤

这里写图片描述

图三:分页效果

这里写图片描述

猜你喜欢

转载自blog.csdn.net/ZZQHELLO2018/article/details/82630659