我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Django 系列博客(二)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Django 系列博客(二)

前言

今天博客的内容为使用 Django 完成第一个 Django 页面,并进行一些简单页面的搭建和转跳。

命令行搭建 Django 项目

创建纯净虚拟环境

在上一篇博客中已经安装好了虚拟环境,所以用虚拟环境来安装指定版本的 Django。为了可以从头到尾的走一遍流程,我重新创建了一个虚拟环境。

激活虚拟环境并安装 Django

  1. 首先进入虚拟环境路径下的 bin 目录
  2. 使用命令激活虚拟环境

  1. 安装指定版本 Django

首先使用 pip3 list 命令查看

可以看到都是创建虚拟环境时安装的依赖包,现在使用 pip 命令安装指定 django 版本,因为做项目需要稳定,所以安装的版本不是最新的。

可以看到新安装了2个包,pytz 是 python time zone 的缩写,是用来转换时区的包。

创建项目

前往目标路径创建项目,在这里我的 django 项目都在我的家目录下面的 django_project里面。

进入要创建项目的路径下,使用下面的命令创建一个 django 项目。

django-admin startproject project_name

可以看到多了个文件夹。查看项目结构

创建应用

进入项目根目录使用下面命令创建一个 app。

python3 manage.py startapp app_name

创建成功并查看项目结构。

启动项目

使用下面命令

python3 manage.py runserver 127.0.0.1:8888

成功后会在本机上的8888端口开启 django 服务

访问8888端口会显示下图页面

好了,到现在你已经开启了第一个 django 服务,并且还是使用了命令行。

pycharm 创建 Django 项目

其实会使用命令行创建项目那么使用 pycharm 应该是手到擒来,毕竟 pycharm 已经做了很多工作了。不过也有点麻烦。。。

在虚拟环境下使用 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

settings.py结构

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

# 项目安全码
SECRET_KEY = 'guwba1u$18=&*8kf44_u&swqb@xlwgel7n$0rs=(+f10yvz)p0'

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

# 在上线项目中,规定只能以什么ip地址来访问django项目
# 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',
    '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
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/'

创建项目应用

使用 pycharm 自带的命令行工具来创建应用

应用创建完后将应用名添加到 settings.py文件中

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

app目录结构

创建后的 app 目录结构和使用命令行创建的一样,下面来看看具体都有什么作用

migrations:数据迁移(移植)模块,内容都是由Django自动生成
    -- __init__.py
__init__.py
admin.py:应用的后台管理系统配置
apps.py:django 1.9后,本应用的相关配置
models.py:数据模型模块,使用ORM框架,类似于MVC模式下的Model层
tests.py:自动化测试模块,可以写自动化测试脚本
views.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)
]

配置视图

# 导入处理请求的 http 相应功能
from django.http import HttpResponse

# django中每一个请求都会设置相应函数来进行处理
# 函数的参数约定为 request
def index(request):
    return HttpResponse('index page!')

启动服务

启动服务后访问 localhost:8000/index/,可以看到响应为 index 函数里填写的响应,说明服务成功启动并且响应了自己想要的响应字符串。

第一个模板页面

项目目录下有个 templates 文件夹是专门用于存放页面资源的,比如index.html

from django.shortcuts import render

def index(request):
    # 参数:请求对象 request,模板 html 文件,传给前台的资源
    return render(request, 'index.html')

index.html 文件

 <!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>主页</title>
</head>
<body>
    <h1>这是主页</h1>
</body>
</html>

配置完成后,访问127.0.0.1:8000/index/后显示为:

在 views.py文件中编写对应响应功能函数时,会自动出现模板文件

这是因为在 settings.py文件中已经把模板路径配置好了

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

第一个重定向

和上面的一样,首先在 views.py文件中配置响应函数

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

响应的路由配置为

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),
]

状态码显示为301说明发生了转跳,查看网络详细信息发现在index/中有个 location 字段,

该字段值为 /,说明转跳到了根目录下。

其他配置

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文件

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),
]

多应用相同模板页面冲突

如果在两个应用中均有相同的模板页面假如为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')

静态资源的配置

假如页面需要一些静态资源,比如需要 css 样式、js 文件等,那么就需要在 settings 文件中配置好静态文件的路径。

配置 settings.py文件

# 静态文件地址 (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文件夹中的路径)

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)

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Django 系列博客(二)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Django 系列博客(二)

前言今天博客的内容为使用 Django 完成第一个 Django 页面,并进行一些简单页面的搭建和转跳。命令行搭建 Django 项目创建纯净虚拟环境在上一篇博客中已经安装好了虚拟环境,所以用虚拟环境来安装指定版本的 Django。为了可以
2023-01-30

Django 系列博客(十二)

前言本篇博客继续介绍 Django 中的查询,分别为聚合查询和分组查询,以及 F 和 Q 查询。聚合查询语法:aggregate(*args, **kwargs)# 计算所有图书的平均价格from django.db.models impo
2023-01-30

Django 系列博客(一)

前言学习了 python 这么久,终于到了Django 框架。这可以说是 python 名气最大的web 框架了,那么从今天开始会开始从 Django框架的安装到使用一步步的学习,这系列博客不会像前端的那样水了(立个 flag),希望可以成
2023-01-30

Django 系列博客(三)

前言本篇博客介绍 django 的前后端交互及如何处理 get 请求和 post 请求。get 请求get请求是单纯的请求一个页面资源,一般不建议进行账号信息的传输。配置路由from django.conf.urls import urlf
2023-01-30

Django 系列博客(四)

前言本篇博客介绍 django 如何和数据库进行交互并且通过 model 进行数据的增删查改ORM简介ORM全称是:Object Relational Mapping(对象关系映射),其主要作用是在编程中,把面向对象的概念跟数据库中表的概念
2023-01-30

Django 系列博客(十三)

前言本篇博客介绍 Django 中的常用字段和参数。ORM 字段AutoFieldint 自增列,必须填入参数 primary_key=True。当 model 中如果没有自增列,则会自动创建一个列名为 id 的列。IntegerField
2023-01-30

python+django博客simbl

概述本博客系统基于Django-1.7.7开发而成,通过nginx+uwsgi运行于locvps,Python版本为 2.7.6。功能    1.文章、分类和页面的增删改查;    2.文章按年、月归档;    3.集成simditor富文
2023-01-31

基于django的个人博客网站建立(二)

前言今天主要完成后台管理员登录的状态以及关于文章在后台的处理具体内容首先接上一次内容,昨天只是完成了一个登录的跳转,其他信息并没有保存到session中,今天先完善一下在用户登录时,先设置了一下sessionrequest.session[
2023-01-31

利用Python Django实现简单博客系统

第一节 - 基础 1. 简单的导览图,学会不迷路对 Django 的评价:借用李清照的《鹧鸪天 桂花》来表达, 暗淡轻黄体性柔。情疏迹远只香留。何须浅碧深红色,自是花中第一流。 梅定妒,菊应羞。画阑开处冠中秋。骚人可煞无情思,何事当年不见收
2022-06-02

Django 博客开发教程 15 -

在 使用 Nginx 和 Gunicorn 部署 Django 博客 中,我们通过手工方式将代码部署到了服务器。整个过程涉及到十几条命令,输了 N 个字符。一旦我们本地的代码有更新,整个过程又得重复来一遍,这将变得非常繁琐。使用 Fabri
2023-01-31

Python采用Django开发自己的博客系统

好久之前就想做一下自己的博客系统了,但是在网上查了查好像是需要会一些Node.js的相关知识,而且还要安装辣么多的库什么的,就不想碰了。但是我遇到了Django这么一款神器,没想到我的博客系统就这么建立起来了。虽然是最基础的类型。但是也算是
2022-06-04

Django 博客开发教程 4 - 让

我们已经编写了博客数据库模型的代码,但那还只是 Python 代码而已,Django 还没有把它翻译成数据库语言,因此实际上这些数据库表还没有真正的在数据库中创建。迁移数据库为了让 Django 完成翻译,创建好这些数据库表,我们再一次请出
2023-01-31

Django搭建个人博客:前言

Django是一个由Python写成的开源Web应用框架,可以用它以更快的速度、更少的代码,搭建一个高性能的网站。如果你以前从未接触过web开发,并且想快速上线自己的个性化网站,Django绝对是你的最佳选择。本教程为零基础的小白准备,教你
2023-01-31

用Django框架快速搭建博客

阅读文本大概需要 5 分钟。上次 2 篇文章给大家分享了 Django 搭建的基本知识,今天就把 Django 基本知识串起来,搭建一个简单的博客网站。项目环境语言:Python 3.6编辑器:Pycharm主要步骤创建项目创建 APP创建
2023-06-02

自己的基于Django开发的博客网站

线上地址: https://www.lylinux.net/ Github地址: https://github.com/liangliang... 基于python3.5和Django1.10的博客。之前一直是使用wordpress搭
2023-01-31

基于django的个人博客网站建立(五)

前言之前鸽了两天,今天继续再写点主要内容今天加了个展示照片的功能,就叫他生活记录吧先建表class Record(models.Model): title = models.CharField(max_length=128) c
2023-01-31

基于django的个人博客网站建立(七)

前言这次在原来的基础上添加或修改一些小功能具体内容1.代码高亮在原来的blog-details.html页面添加下面的代码:2023-01-31

基于django的个人博客网站建立(四)

前言今天主要添加了留言与评论在后台的管理和主页文章的分页显示,文章类别的具体展示以及之前预留链接的补充主要内容其实今天的内容和前几天的基本相似,就是个体力活首先是评论在后台的管理:@authdef view_comment(request)
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录