Django基础

一、Python Web框架分类

按功能分类:
a:收发消息相关(socket)
b:根据不用的URL执行不同的函数(业务逻辑相关的)
c:实现动态网页(字符串的替换)

Web框架分类:
1. 自己实现b,c,使用第三方的a      --> Django框架
2. 自己实现b,使用第三方的a和c      --> Flask框架
3. 自己实现a\b\c                              --> Tornado框架

 

二、Django基础

1、安装Django

 

2、创建Django项目

1)、命令行中创建
django-admin startproject 项目名
2)、Pycharm中创建

 

3、运行Django项目(启动服务器)

1)、命令行中运行
python mange.py runserver 127.0.0.1:端口号
2)、Pycharm中运行

 

4、Django项目的目录结构

mysite:项目的容器。
manage.py: 一个实用的命令行工具,可以各种方式与该 Django 项目进行交互。
mysite/__init__.py:一个空文件,告诉 Python 该目录是一个 Python 包。
mysite/settings.py:该 Django 项目的设置/配置。
mysite/urls.py:Django项目的URL声明,URL和函数的对应关系,一份由 Django 驱动的网站"目录"
mysite/wsgi.py:一个 WSGI 兼容的 Web 服务器的入口,以便运行你的项目。

 

WSGI相关知识

WSGI(Web Server Gateway Interface):Web服务器网关接口
WSGI位于web应用程序与web服务器之间,是作为Web服务器与Web应用程序或应用框架之间的一种低级别的接口,以提升可移植Web应用开发的共同点。

WSGI入口处提供一个start_respone用于回调(callback),入口会连接到出口的一个函数,并传递environ字典和start_respone作为参数;而出口处的函数先是调用start_respone并传递status和header,然后再返回content。

Python代码实现WSGI:
def application(environ, start_respone):
    status = '200 OK'
    response_header = [('Content-type', 'text/plain')]
    start_response(status, response_headers)
return ['Hello']

 

WSGI: Python 的 HTTP 接口协议
CGI: 通用网关接口,古老的动态 HTTP 服务方式,极其低效、容易出漏洞。Perl 盛行的时代很常用。
Tornado: HTTP 服务器、WSGI 框架
FastCGI: PHP 等的接口协议。PHP 也是唯一一个把 FastCGI 实现得像 CGI 的 FastCGI 实现(HTTP 头可通过环境变量访问)
uwsgi: 它是一个软件。是 WSGI、PSGI 等等的容器。也就是它实现了这些协议。同样实现了 WSGI 的还有 gunicorn 之类的。
nginx: 可以作为代理,把 HTTP 传给 Tornado。也可以作为网关,把 HTTP 转成 FastCGI、uwsgi 协议传给后边的程序。

WSGI、CGI等标准就是让WEB服务器知道找谁处理请求;让应用程序知道请求是什么,响应返回给谁。

 

6、静态文件配置(存放CSS、js文件)

STATIC_URL = '/static/'      # HTML中使用的静态文件夹前缀,相当于静态文件的别名
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),      # 静态文件存放位置
]

 

三、Django基础必备三件套

1)、HttpResponse
内部传入一个字符串参数(响应体内容),返回给浏览器

from django.shortcuts import HttpResponse
def 页面名(request):
    业务逻辑代码
    return HttpResponse(字符串)

 

2)、render
from django.shortcuts import render
def 页面名(request):
    业务逻辑代码
    return render(request, 'html文件', 字典)     打开一个文件,把文件的内容读取出来。字典对应html中的变量{{ }}

 

3)、redirect

接受一个URL参数,表示跳转到指定的URL

from django.shortcuts import redirect
def 页面名(request):
    业务逻辑代码
    return redirect('URL')

 

四、Django表单

Django获取form表单post过来的数据:
request.method   -->   获取的是请求的方法(GET/POST...),必须是大写!!!
request.POST  -->  获取POST提交过来的全部数据(字典)
request.POST.get('password')

 

五、APP

一个Django项目可以分为很多个APP,用来隔离不同功能模块的代码。

 

项目和APP的区别就是一个是配置,另一个是代码:一个项目包含很多个Django app以及对它们的配置

技术上,项目的作用是提供配置文件,比方说哪里定义数据库连接信息、安装的app列表、TEMPLATE_DIRS等等。

一个app是一套Django功能的集合,通常包括模型和视图,按Python的包结构的方式存在。例如,Django本身内建有一些app,例如注释系统和自动管理界面。

app的一个关键点是它们是很容易移植到其他项目和被多个项目复用。

 

1、创建app

1)、通过命令行创建:

python manage.py startapp app的名字

2)、Pycharm创建:
Tools  -->  Run manage.py Task  -->  在下方弹出的命令窗口输入:startapp app的名字

 

一个app包含的文件:
__init__.py     为空文件,表示该目录下的文件是一个整体模块
models.py     文件中定义各类数据表格类
views.py

 

2、app配置

创建好app之后,还需要对其进行注册,告诉Django已经创建了这个app。

在settings.py的INSTALLED_APPS添加一行(行末尾不要忘记逗号):
'app的名字.apps.app的名字Config',

 

六、Django里的ORM创建步骤

0)、手动新建数据库

1)、首先告诉Django连接哪个数据库

settings.py --> DATABASES
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',           #Django默认为sqlite3,需改为mysql
        'NAME': 'db1',                                                   #数据库名改为自己创建的
        'HOST': '127.0.0.1',
        'PORT': 3306,
        'USER': 'root',
        'PASSWORD': 123,
    }
}

 

2)、接着告诉Django怎么连接数据库

Django默认使用的是 MySQLdb模块连接数据库,要告诉Django用pymysql这个模块去连接MySQL

 

在settings.py同目录下的__init__.py,指定使用pymysql模块代替MySQLdb

import pymysql
pymysql.install_as_MySQLdb()

 

3)、在app/models.py文件中定义类,类一定要继承models.Model

 

4)、最后执行创建表的操作

命令行创建:
1. python manage.py makemigrations   --> 将models.py的修改登记到小本本上(小本本是app -- migrations-0001_initial.py)
2. python manage.py migrate                --> 将修改翻译成SQL语句,去数据库执行

 

七、新建Django项目的步骤:

1、创建项目和APP
2、创建数据库和配置数据库
3、配置templates和静态文件相关
4、注释掉setting.py中的csrf那一行


八、Django项目的业务流程逻辑

1、在urls.py中添加用户访问的URL与将要执行的函数的对应关系

 

2、执行函数需要写在 app项目--views.py 中,执行函数的逻辑:用ORM查询数据库,在页面中显示出来

1)、执行函数:
获取数据:models.ORM类.objects.all()      相当于SQL中的select * from
                  models.ORM类.objects.filter(条件)       相当于SQL中的where,可设置条件过滤结果
                  models.ORM类.objects.get(条件)       获取单个对象
                  models.ORM类.objects.order_by(条件)     数据排序
添加数据:.save()
更新数据:models.ORM类.objects.update()
删除数据:models.ORM类.objects.delete()

2)、return返回(不加return页面无法显示)

3、html文档添加特殊的符号,等待被替换

1)、if/else 标签
根据条件判断是否输出。if/else 支持嵌套,接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not )

语法:
{% if 条件 %}
    html代码
{% endif %}

或:
{% if 条件1 %}
    html代码
{% elif 条件2 %}
    html代码
{% else %}
    html代码
{% endif %}

2)、for 循环标签
在一个序列上迭代,循环语法是 for X in Y。可以嵌套使用 {% for %} 标签
每一次循环中,模板系统会渲染在 {% for %} 和 {% endfor %} 之间的所有内容

3)、ifequal/ifnotequal 标签
{% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值,支持可选的 {% else%}

4)、注释标签
{# 注释内容 #}

5)、过滤器
模板过滤器可以在变量被显示前修改它,过滤器使用管道字符
如:{{ name|lower }},意思是{{ name }} 变量被过滤器 lower 处理后,文档大写转换文本为小写

过滤管道可以被 套接 ,既是说,一个过滤器管道的输出又可以作为下一个管道的输入:{{ my_list|first|upper }},意思是将第一个元素并将其转化为大写

6)、include 标签
{% include %} 标签允许在模板中包含其它的模板的内容

7)、模板继承

 

posted @ 2018-06-11 20:01  字符编码  阅读(139)  评论(0编辑  收藏  举报