Django

写在之前:

Web框架本质就是一个socket服务端,其实现的功能无非就是:

  1. 与客户端(一般为浏览器)收发消息;
  2. 实现url和函数的对应关系,根据不同的URL执行不同函数;
  3. 字符串的替换(模板渲染)

Django可以说是基于Python语言的一款非常成熟的框架,为我们实现了web框架中的2,3功能,并且使用了wsgiref实现了1功能,可谓非常强大的Web框架。

ps:python中其他Web框架,如Flask(用Python编写的轻量级Web应用框架,实现了功能2),Tornado(异步非阻塞IO的Python Web框架,实现了1,2,3功能),等框架;

一,Django的基本运作原理

Django的基本运作原理无非就是"请求","接收","响应","返回":

"请求":由客户端向服务器端发起"请求"

"接收":服务器端收取客户端发来的"请求"

"响应":服务器端对"接收"来的客户端"请求"进行处理

"返回":由服务器端向客户端发起"返回"

以上就是简单的概念,再之后的讲解中会逐一击破!

Django就是基于这四点要素进行运作的,客户端就是PC上的浏览器,向服务器发起一个访问请求,服务器收到访问请求之后,找到客户端想要访问的页面,将页面进行处理返回给客户端(如图)

二,Django的使用

1,首先你需要下载Django

第一种方式,采用命令行下载:

pip3 install Django==1.11.14   # 前提你的安装python环境

第二种方式下载(如果你使用的IDE工具是pycharm):

。。。。。。

2, 创建一个Django项目

第一种方式,采用命令行创建:

# 先cd到你要创建django项目的目录下;
# 执行: Django-admin startproject 项目名称

第二种方式使用pycharm创建:

 3 ,启动Django项目

第一种方式,命令行:

python manage.py runserver  # 127.0.0.1:8000
python manage.py runserver 80 # 127.0.0.1:80 # 指定端口
python manage.py runserver 0.0.0.0:80 # 0.0.0.0:80 # 指定IP + 端口

第二种方式,pycharm:

 

 4,Django项目文件目录

  4.1 基本目录:

4.2 如果创建了使用pycharm创建了app:

ps:使用命令行创建app:

# 进入项目根目录,执行:
python manage.py startapp app名称

也可在pycharm中进入TOOLS ——》 run manage.py Task  ——》 执行  startapp app名称

5,同步更改数据库表或字段

'''
    python manage.py syncdb
     
    注意:Django 1.7.1 及以上的版本需要用以下命令
    python manage.py makemigrations
    python manage.py migrate
    
'''

这种方法可以创建表,当你在models.py中新增了类时,运行它就可以自动在数据库中创建表了,不用手动创建。

6,清空数据库

python manage.py flush

 此命令会询问是 yes 还是 no, 选择 yes 会把数据全部清空掉,只留下空表。

7,创建超级管理员

'''
    python manage.py createsuperuser
     
    # 按照提示输入用户名和对应的密码就好了邮箱可以留空,用户名和密码必填
     
    # 修改 用户密码可以用:
    python manage.py changepassword username
    
'''

8,Django 项目环境终端

python manage.py shell

这个命令和 直接运行 python 进入 shell 的区别是:你可以在这个 shell 里面调用当前项目的 models.py 中的 API,对于操作数据的测试非常方便。

9、Django 项目数据库环境终端

python manage.py dbshell

Django 会自动进入在settings.py中设置的数据库,如果是 MySQL 或 postgreSQL,会要求输入数据库用户密码。

在这个终端可以执行数据库的SQL语句。如果您对SQL比较熟悉,可能喜欢这种方式。

10,更多命令

python manage.py

 查看所有的命令,忘记子名称的时候特别有用。

11, 配置Django项目

  • Django项目文件目录:与项目同名的目录:工程目录-用于存放配置文件,路由文件等相关
  • __init__.py: 项目工程目录加载时执行的py脚本,可以用于更改环境变量等等
  • settings.py: 项目配置文件,如果没有这个文件整个Django项目运行就会崩溃
  • urls.py: Django的路由文件,利用正则解析URL地址得到匹配的,视图函数
  • wsgi.py:通讯协议配置文件,在settings.py中WSGI_APPLICATION配置指向这个文件,而这个文件默认是使用get_wsgi_application来调用WSGI协议

    settings: WSGI_APPLICATION = 'project.wsgi.application'
    wsgi: application = get_wsgi_application()

  • template文件夹: 用于存放可以被渲染的模板文件(html文件)
  • manager.py: 顾名思义这里Django的管理文件,用于执行对Django项目的操作,比如新建app,建立moudels等

11.1 setting配置

项目绝对路径:BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)));

SECRET_KEY:
提供算法的随机字符串(暂时不知道用途)

DEBUG:
是否启用调试模式,如果是True的话,页面报错会将错误信息打印在页面中,如果是False的话,错误信息不回打印到页面中,而如果页面出错,则会弹出Django默认的错误页面

ALLOWED_HOSTS=[]:
绑定域名,如果不使用此域名,是无法访问的

INSTALLED_APPS:
所注册的应用,如果有新创建的app,必须在此处进行注册,才可以进行后续的models操作

MIDDLEWARE:
所注册的中间件,这里就是在请求到达视图函数之前,所需要经历的所有中间件

ROOT_URLCONF= 'StudentManager.urls':
根路由文件指向,当Django需要路由指向时,会读取这个参数

TEMPLATES:
模板相关配置,这里面关注DIRS就可以了,它是Django识别模板目录的配置
'DIRS': [os.path.join(BASE_DIR, 'templates')],
templates刚才咱们再上边说过它是默认的模板路径

WSGI_APPLICATION = 'StudentManager.wsgi.application':
当前Django项目所使用的WSGI

DATABASES:
数据库配置(字典),这里面关注一下'default'(字典),它是用于配置Django所连接的数据库,default是链接名称,在Django项目中可以连接多个数据库.这里字典中的Key其实就是咱们在pymysql.connect中传入的数;

'mysqlDB': {
'ENGINE': 'django.db.backends.mysql',数据库驱动
'NAME': "students",数据库名称
'USER': "root",数据库用户名
'PASSWORD': "123",数据库密码
'HOST': "127.0.0.1",数据库所在服务器地址
'PORT': 8000,数据库服务器端口
}

AUTH_PASSWORD_VALIDATORS:看名字就知道,这个是用来做密码验证的。
比如当你运行mange.py createsuperuser 时,输入的密码必须满足以上的条件。

LANGUAGE_CODE = 'en-us'
语言
TIME_ZONE = 'UTC'
时区
USE_I18N = True
是否国际化
USE_L10N = True
是否本地化

STATIC_URL:
映射到静态文件的URL路径,一般咱们默认为"/static/"
STATICFILES_DIRS:
元组类型,这里面存放的每一个元素都是URL路径用于,放各个app的static目录及公共的static目录,这里一定要在每个元素的后面加上","否则会报错的;

11.2 urls.py

settings文件中已经提到了一个配置ROOT_URLCONF,跟路由,这个文件就是配置中的指向

urlpatterns:
url(r'^index$', views.index),

这个列表中存放着多个url函数,url函数里面是什么,regex,view

这样的话,我们就可以理解为,url帮我们做的事情,就是当匹配到某字符串之后,执行某方法

当然这里还有regex,view,kwargs,name参数,我们来逐一看一下
regex,正则表达式
view,视图函数
kwargs,看起来是一个字典,没错这里面是额外参数,但是在你的视图函数中需要一个**kwargs来接收,否则会在抛出来一个,异常参数的错误
name,视图函数匿名,可以在模板中使用{% url "name" 参数 %}的方式来调用URL,这种调用url的方式可以有效避免掉一些恶意产生的"死地址",这种死地址可能会造成页面的崩溃

 

接下来,看一下:regex中的正则匹配方式:
第一种,标准规范化的单一路由对应

url(r'^index$', views.index),

第二种,正则参数url路由

url(r'^index/(\d*)', views.index),
url(r'^manage/(?P<name>\w*)/(?P<id>\d*)', views.manage),

第三种,正则外的参数

url(r'^index/$', index.Index.as_view(),{"name":"sb"}),

第四种,匿名url

url(r'^index/$', index.Index.as_view(),name="a")

第五种,匿名反向URL

1.url(r'^index/$', index.Index.as_view(),name="a")
{% url "a" %}
reverse("a")
2.url(r'^index/(\w+)/$', index.Index.as_view(),name="a")
{% url "a" 1 %}
reverse("a",args=(123,))
3.url(r'^index/(?P<name>\w*)/(?P<id>\w*)', index.Index.as_view(),name="a"),
{% url "a" 1 %}
reverse("a",kwargs={"name":"a","id":"b"})

匿名反向url

路由分发:
url(r'^social/', include("Social.urls")),
但凡遇到social/的url被正则匹配到,都要去Social.urls中,进行重新定向
但是这里要注意的是,social已经被匹配走了,剩下的就是social/之后的内容
如:social/this/ 被定向到 Social.urls 中,就剩下了this/,所以在匹配时应注意

 

 

 

 



posted @ 2018-07-25 22:24  Mr.GLH  阅读(267)  评论(0)    收藏  举报
Top↑