Django框架的初步使用

目录

 

一、Django环境的安装

1.1 终端安装Django

1.2 pycharm可视化安装

二、Django项目的创建

2.1 在终端创建Django项目

2.2 在pycharm中创建项目

三、Django项目的项目目录说明

四、Django项目中应用的创建

五、Django项目中的应用的目录说明

六、Django使用的基本步骤和相关设置

6.1 项目响应请求

6.1.1 GET请求的数据处理

6.1.2 POST请求的数据获取

6.2 模板渲染

6.3 第一个重定向

6.4 url应用移植

6.5 多应用相同模板页面冲突

6.6 静态资源的配置(重点)

6.7 url正则解读

6.8 DTL 前后台数据通信

6.9 form表单提交数据

6.10 连接数据库


一、Django环境的安装

python环境和Django环境的安装

安装python3.6版本:官网下载python3.6安装包,安装本地,并配置环境变量
安装Django1.11.9版本:官网查看Django个版本特性

1.1 终端安装Django

在命令行终端安装Django只需在打开命令行之后输入相应的安装命令即可, 下面是真实python环境下Django的命令行安装命令

安装命令:pip3 install django==1.11.9
查看版本命令:django-admin --version

如果要在虚拟环境中安装Django ,首先要激活虚拟环境,然后再使用和真实环境相同的安装命令即可

注意:
     在安装过程中如果出现安装错误, 可能是计算机需要相应的权限而普通的命令行终端没有管理员权限, 这个时候可以采用管理员命令行进行安装

1.2 pycharm可视化安装

项目设置下Project Interpreter下为python3.6版本安装
搜索Django包,并选取对应版本号,这里我们选用的是1.11.9版本的Django, 我们在开发的过程中, 要本着稳定好用, 不容易出问题的原则去选用软件、模块和框架等的版本去使用, 并不是最新版本的就是最好用的

 

二、Django项目的创建

2.1 在终端创建Django项目

1、指定目录下:cd 目标路径
2、创建django项目:django-admin startproject 项目名
3、进入项目目录:cd 项目名
4、启动项目:python3 manage.py runserver 127.0.0.1:8000
5、停止项目:Ctrl + c

2.2 在pycharm中创建项目

三、Django项目的项目目录说明

项目目录:包含项目最基本的一些配置

  • __init__.py:  模块的配置文件,将blog_proj文件夹变成了模块

  • settings.py:  总的配置文件

  • urls.py:         url(路由)配置文件,django项目中的所有页面都需要对其配置url地址

  • wsgi.py:       (web server gateway interface),服务器网关接口,python应用与web服务器直接通信的接口

  • templates:    模板文件夹,存放html文件的(页面),支持使用Django模板语言(DTL),也可以使用第三方(jinja2)

  • manage.py:  项目管理器,与项目交互的命令行工具集的入口,查看支持的所有命令python3 manage.py

下面我们对配置文件做一个简单的说明和注释, 方便大家参考
在多数难理解的配置下面  都放了相关的配置连接, 有不懂的地方,方便到官方的配置连接中查看配置说明

import os
# 项目根目录
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

# 项目安全码
# 项目安全码是保证每一个创建的项目数据安全的 
和下面工具集中的django.middleware.csrf.CsrfViewMiddleware 配合来保证项目的数据安全
SECRET_KEY = 'guwba1u$18=&*8kf44_u&swqb@xlwgel7n$0rs=(+f10yvz)p0'

# 调试模式,上线项目要关闭debug模式,不然后台出现异常会直接抛给前台展现给用户看
DEBUG = True

# 在上线项目中,规定只能以什么ip地址来访问django项目, 可以只设置一个ip地址, 也可以在列表中设置多个ip地址
# DEBUG = FALSE
# ALLOWED_HOSTS = ['localhost']
ALLOWED_HOSTS = []

# 项目自带的应用
# 我们创建了自己的应用就要将自定义应用添加到该配置
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

# 中间件
# django自带的工具集
MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 在测试时 该中间件要先注释掉(在使用POST方式发送数据的时候会被禁掉)
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

# 配置url配件文件的根文件,执行urls.py
ROOT_URLCONF = '项目目录.urls'

# 模板,一个个html文件
TEMPLATES = [
    {
        # 如果使用第三方,可以在这个地方修改模板引擎
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

# 服务器网关接口应用
WSGI_APPLICATION = '项目目录.wsgi.application'

# 数据库配置
# 要配置自定义数据库去下面链接去查询详细配置
# https://docs.djangoproject.com/en/1.11/ref/settings/#databases
# sqllite3 是一个文件数据库, 很小型,用其他数据库时需要修改
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

# 密码认证配置
# https://docs.djangoproject.com/en/1.11/ref/settings/#auth-password-validators
AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# 国际化相关配置
# https://docs.djangoproject.com/en/1.11/topics/i18n/
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True

# 静态文件地址 (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.11/howto/static-files/
STATIC_URL = '/static/'

四、Django项目中应用的创建

Django中项目和应用分别指什么,有什么区别?

方法一: Django项目中应用的创建:

进入项目根目录
创建应用: python3 manage.py startapp app_name
去项目的settings文件添加 应用名 到INSTALLED_APPS

INSTALLED_APPS = [
    'django.contrib.admin',
    	...
    'django.contrib.staticfiles',
    # 添加的自定义应用
    'app',
]

方法二: 除了在命令行终端或者pycharm中的terminal中创建应用外, 我们在创建Django项目的时候,可以直接将应用也创建出来:

方法三: 在已经创建好了Django项目之后在pycharm中创建新的应用
选择有django环境的解释器创建项目
Tools -> Run manage.py Task... -> startapp app_name
正常运行项目来启动项目, 并不是执行某一个py文件

五、Django项目中的应用的目录说明

  • migrations:数据迁移(移植)模块,数据库相关, 做了数据迁移之后 ,里边会有记录, 内容都是由Django自动生成

  •     migrations下的   __init__.py

  • __init__.py   项目应用的配置文件

  • admin.py:  应用的后台管理系统配置

  • apps.py:    django 1.9版本后,本应用的相关配置

  • models.py:对象关系映射的类, 数据模型模块,使用ORM框架,类似于MVC模式下的Model层

  • tests.py:    自动化测试模块,可以写自动化测试脚本

  • views.py:   执行相应的逻辑代码模块(响应什么,如何响应),代码逻辑处理的主要地点,项目的大部分代码所在位置

六、Django使用的基本步骤和相关设置

启动服务

在所有的配置完成后就可以启动服务了
在终端启动服务:  在项目根目录下: python3 manage.py runserver 127.0.0.1:8888
在pycharm中启动服务只需要点击启动按钮即可
在启动按钮旁边可以选择配置服务的地址和端口等配置信息

6.1 项目响应请求

在后台相应前台的数据请求的时候

  •  首先解析出路由,

  • 然后根据路由配置信息,到视图文件中,匹配到相应的视图响应函数

  • 由函数体代码的相关逻辑来处理数据,最后返回一个处理结果

项目中的urls.py文件中配置路由
配置路由时的url() 的参数说明:
第一个参数是正则表达式, 根据正则表达式来解析出路由
第二个参数是相应路由对应的视图响应函数的地址, 也就是该路由被哪个函数处理
第三个参数可以传入视图响应函数的参数

# 文件: 项目下 urls.py
from django.conf.urls import url
from django.contrib import admin
# 导入应用视图
import app.views as app_view
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # 为指定响应函数配置url
    url(r'^index/$', app_view.index),
]

路由配置好之后到应用目录中找到views视图处理文件中配置路由对应的视图响应函数
在这里要注意视图响应函数必须要有参数接收自动传入的request
关于request:  

  • 是一个对象,封装了浏览器提交过来的所有数据
  • 自动传入, 试图响应函数必须要设置相应的形参来接收该参数
# 导入处理请求的 http相应 功能
from django.http import HttpResponse

# django中每一个请求都有一个函数来处理
# 函数的参数约定request
def index(request):
    # 简单响应一个字符串
    return HttpResponse('index page!')

6.1.1 GET请求的数据处理

我们在这里通过设置登录的视图响应函数来说明处理get方式的数据请求

def login(request):
    if request.method == "GET":
        # 获取到则返回一个值, 获取不到返回None
    	request.GET.get('usr')
        # 获取到则返回一个值, 获取不到返回默认值PWD, 默认值不设置时返回None
        request.GET.get('pwd', 'PWD')
        # 获取到则返回的多个值
        request.GET.getlist('stus')

6.1.2 POST请求的数据获取

POST 和GET的数据处理方式差别不大, 在判断阶段修改响应的条件就可以了

request.POST 是一个字典, 字典中放着浏览器post形式提交过来的数据
def login(request):
    if request.method == "POST":
        # 获得到则返回一个值, 获取不到返回None
    	request.POST.get('usr')
        # 获得到则返回一个值, 获取不到返回默认值PWD
        request.POST.get('pwd', 'PWD')
        # 获得到则返回的多个值
        request.POST.getlist('stus')

6.2 模板渲染

模板渲染是在视图响应函数中通过后台返回前端页面给用户的(也就是前后端不分离时的处理), 它是通过到指定的Templates(用于存放模板页面)文件中夹中,找到相应的要返回的模板页面,在函数中返回给前台的方式进行模板渲染的

  • 项目下的templates文件夹用于存放模板页面,在该文件夹中新建index.html 

from django.shortcuts import render
def index(request):
    # 参数:请求对象request, 模板html文件, 传给前台的数据
    return render(request, 'index.html')
  • 模板路径配置解读

TEMPLATES = [
    {
        # 如果使用第三方,可以在这个地方修改模板引擎
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        # 模板页面默认路径:项目根路径下的templates文件夹
        'DIRS': [os.path.join(BASE_DIR, 'templates')]
        ,
        # 允许所有app均拥有自己的模板文件夹
        'APP_DIRS': True,
        ...
    },
]

6.3 第一个重定向

重定向也是视图响应函数中的返回模板页面的一种方式

from django.shortcuts import render, redirect
# / 路径渲染index.html页面
def home(request):
    return render(request, 'index.html')
# /index/ 路径重定向到 / 路径,达到渲染index.html页面
def index(request):
    return redirect('/')

在项目目录下的urls.py文件配置 / 路径

from django.conf.urls import url
from django.contrib import admin
# 导入应用视图
import app.views as app_view
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^index/$', app_view.index),
    url(r'^$', app_view.home),
]

6.4 url应用移植

  • 项目目录下的urls.py文件

 # 导入include功能,将url配置转移到指定应用内部的自身url配置文件
  from django.conf.urls import url, include
  from django.contrib import admin
  urlpatterns = [
      url(r'^admin/', admin.site.urls),
      # 将url配置操作交给app_test自身的urls.py来进行操作
      # app-test/为app_test应用的总路径
      url(r'^app-test/', include('app_test.urls')),
  ]
  • app_test下的urls.py文件

  • app_test是另一个新的应用

from django.conf.urls import url
  from . import views
  urlpatterns = [
      # 1.不要直接留空,直接留空 http://localhost:8000/app-test/* 均可以访问
      # 2.如果要配置index,访问的地址为 http://localhost:8000/app-test/index
      # 3.配置方式:r'^index/$',不要省略 / 符号
      # 4.正则是否以$标识结尾取决于该路径是否会有下一级路径
      url(r'^$', views.index),
  ]

6.5 多应用相同模板页面冲突

app和app_test两个应用均有模板页面index.html 的时候就会出现多应用相同模板冲突的情况

# 1.在应用templates文件夹下建立与应用同名的文件夹,eg:app_text下就建立app_text
# 2.将模板创建在与应用同名的模板文件夹下
# 3.修改指定应用下views.py处理请求的render模板指向
def index(request):
    # 模板指向:blog_app应用的templates下的blog_app文件夹中的index.html
    return render(request, 'app_text/index.html')

6.6 静态资源的配置(重点)

什么是静态资源?
   
静态资源是指我们在使用Django时需要关联JavaScript的css样式文件, 导入的jQuery和Bootstrap等, 当然我们也可以通过设置相应的视图响应函数来设置页面的样式, 但是在我们在实际的生产中不能一个样式设置一个响应函数来处理, 那样我们的代码的可读性和可管理性将会变得非常差, 这个时候就需要配置这些静态资源文件

下面我们来介绍一下怎么配置静态资源
我们在配置的地方放置了官方的配置连接, 详细的配置连接可以查看连接

  • 配置文件settings.py

配置文件中的 STATIC_URL = '/static/'  这里的 static不是一个文件夹, 它是静态文件的总路由, 我们在html中使用link/script 标签来关联静态文件的时候, Django是通过这个总路由来找到相应的文件的, 我们一般在配置静态文件的时候, 在项目的根目录创建一个static文件夹, 然后在static文件夹中按照分类放置相应的静态文件, 我们还可以拓展静态资源

  # 静态文件地址 (CSS, JavaScript, Images)
  # https://docs.djangoproject.com/en/1.11/howto/static-files/
  STATIC_URL = '/static/'
  # 在项目根目录下新建static文件夹,静态资源均放在该文件夹中
  # 增加STATICFILES_DIRS配置
  STATICFILES_DIRS = [
      os.path.join(BASE_DIR, 'static')
  ]
  # 前端页面加载静态资源的路径:/static/... (...为具体在static文件夹中的路径)
  • 拓展静态资源配置

  # 如果要将项目根目录下source文件夹也作为静态资源路径
  # STATICFILES_DIRS增加source配置
  STATICFILES_DIRS = [
      os.path.join(BASE_DIR, 'static'),
      os.path.join(BASE_DIR, 'source')
  ]
  # 前端页面加载静态资源路径依旧不变,Django会自动索引:/static/... (...为具体在source文件夹中的路径)

6.7 url正则解读

  • 原生字符串

  # urls.py配置路由
  url(r'test', app_view.test)
  ​
  # views.py设置响应函数
  def test(request):
      return HttpResponse('test')
  ​
  # 问题:请求地址包含test均可以访问
  # http://127.0.0.1:8000/test => /test | /atest | /testa | /atesta | /test/a | /test/
  • 限制开头

  # urls.py配置路由
  url(r'^test', app_view.test)
  ​
  # views.py设置响应函数
  def test(request):
      return HttpResponse('test')
  ​
  # 问题:请求地址以test开头均可以访问
  # http://127.0.0.1:8000/test => /test | /testa | /test/a | /test/
  • 再限制结尾

  # urls.py配置路由
  url(r'^test$', app_view.test)
  ​
  # views.py设置响应函数
  def test(request):
      return HttpResponse('test')
  ​
  # 问题:只能一种方式访问
  # http://127.0.0.1:8000/test => /test
  # 不能以 /test/ 访问
  # http://127.0.0.1:8000/test/
  • 优化结尾

  # urls.py配置路由
  url(r'^test/$', app_view.test)
  ​
  # views.py设置响应函数
  def test(request):
      return HttpResponse('test')
  ​
  # /test 和 /test/ 均可以访问
  # http://127.0.0.1:8000/test
  # http://127.0.0.1:8000/test/
  ​
  # 问题:不能作为应用总路由
  # eg:app_test应用在项目urls.py
  # url(r'^app-test/', include('app_test.urls')) 末尾不能加$,因为作为应用总目录,是有下一级,如果用$标识结尾了,就代表不能有下一级路由
  • 地址捕获

  # urls.py配置路由
  url(r'^test/(\d+)/\d+/(\d+)/$', app_view.test)
  ​
  # 对应请求路径
  # http://127.0.0.1:8000/test/1/22/333/
  ​
  # 对应响应函数
  def test(request, arg1, arg2):
      # arg1: str 1
      # arg2: str 333
      return HttpResponse('test')
  • 小结

常规路由配置
r'^index/$'
r'^page/2/$'
  ​
应用路由配置
r'^app/'
  ​
根路由配置
r'^$'
  ​
路由配置均以 / 结尾
 ()中的字段会被请求响应函数捕获
  ​
限制响应函数捕获的变量名
(?P<num>[0-9]+) 响应函数参数(requset, num)

6.8 DTL 前后台数据通信

  • DTL概念

Django模板语言(Django Template Language)

  • 响应函数传输数据给前端页面

  # views.py
  from django.shortcuts import render
  def index(request):
      dic_data = {'key1': value1, 'key2': value2}
      return render(request, 'index.html', dic_data)
  <!-- index.html -->
  <body>
      {{ key1 }}
      {{ key2 }}
  </body>
  • 前端页面传输数据给响应函数

 <!-- index.html -->
  <body>
      <a href="{% url 'run_action' 1 %}">run 1</a>
      <a href="{% url 'run_action' 2 %}">run 2</a>
  </body>
  # views.py
  from django.http import HttpResponse
  def run(request, num):
      if num == '1':
          return HttpResponse('run 1')
      if num == '2':
          return HttpResponse('run 2')
      return HttpResponse('404')
  # urls.py
  url(r'^run/(?P<num>[0-9]+)/$', run, name='run_action')
  • 拓展

  # 针对发生url转移的应用
  # 项目urls.py
  url(r'^app_test/', include('app_test.urls', namespace='app_test'))
  # 应用urls.py
  url(r'^index/$', index, name='index')
  # 模板语法
  <a href="{% url 'app_test:index' %}">test app index</a>

6.9 form表单提交数据

配置登录界面

# urls.py配置路由
url(r'^login/$', login, name='login')
# templates下新建login.html页面
# views.py设置响应函数
def login(request):
    pass

前端login.html页面
使用form表单提交数据的时候action属性可以有三种写法:
第一种: 什么都不写  提交到当前页面本身

第二种:http://127.0.0.1/login/

第三种: 直接写/login/  (推荐这种写法)

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>登录</title>
    <link rel="stylesheet" href="/static/dist/css/bootstrap.css">
    <link rel="stylesheet" href="/static/css/login.css">
</head>
<body>
<div class="container">
    <!-- hint:1 -->
    <form action="{% url 'login' %}" method="post" class="col-md-6 col-md-offset-3">
        <!-- hint:2 -->
        {% csrf_token %}
        <div class="form-group">
            <label for="usr">用户名:</label>
            <input class="form-control" type="text" id="usr" name="usr" placeholder="请输入用户名">
        </div>
        <div class="form-group">
            <label for="pw">密码:</label>
            <input class="form-control" type="password" id="pw" name="pw" placeholder="请输入密码">
        </div>
        <div class="form-group">
            <label class="checkbox-inline">
                <input name="hobbies" type="checkbox" id="inlineCheckbox1" value="basketball"> 篮球
            </label>
            <label class="checkbox-inline">
                <input name="hobbies" type="checkbox" id="inlineCheckbox2" value="football"> 足球
            </label>
            <label class="checkbox-inline">
                <input name="hobbies" type="checkbox" id="inlineCheckbox3" value="ping-pong"> 乒乓球
            </label>
        </div>
        <button type="submit" class="btn btn-info col-md-12">登录</button>
    </form>
</div>
</body>
</html>
<!-- hint:1 -->
<!-- action参数值:不填(向当前路径提交请求) | http://127.0.0.1:8000/login/ | /login/ | {% url 路由名 %} -->

<!-- hint:2 -->
<!-- 表单做提交需要做token的安全验证,也可以注释settings.py中间件:'django.middleware.csrf.CsrfViewMiddleware' -->

6.10 连接数据库

import pymysql
# 连接数据库
conn = pymysql.connect(host='localhost', port=3306, user='root', password='root', db='django')
# 设置游标执行sql语句
cur = conn.cursor(pymysql.cursors.DictCursor)
# cur.execute('select * from user')
cur.execute('select * from user where usr=%s and pwd=%s', [usr, pwd])

# 获取执行结果
# users = cur.fetchall() # 所有用户数据
res = cur.fetchone() # 一条用户数据

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值