Django 基本知识学习笔记

创建项目

打开命令行,进入想要安置项目的目录。

命令行输入:django-admin startproject myblog

若没有报错,则创建项目成功。

注:django-admin 为安装 Django 后有的命令,可以命令行直接输入 django-admin 查看所有方法

启动命令

可以使用命令 python manage.py 查看对应的命令,运行项目使用:python manage.py runserver

默认的端口号是 8000 想指定端口号,可以使用 python manage.py runserver 9999 这种形式,这里就跑在了 9999 端口上了。

创建应用

创建步骤:

打开命令行,进入项目中 manage.py 同级目录

命令行输入:python manage.py startapp blog (注意,应用名不能和 python 自有的 module 名产生冲突)

添加应用名到 setting.py 中的 INSTALLDE_APPS 里

目录介绍

目录结构:

myblog
├── blog
│   ├── __init__.py  //python 中声名模块的文件,内容默认为空
│   ├── __init__.pyc
│   ├── admin.py    //该应用的后台管理系统配置
│   ├── admin.pyc
│   ├── apps.py     //该应用的一些配置,在 Django-1.9 以后自动生成
│   ├── migrations  //数据移植(迁移)模块,内容自动生成
│   │   ├── __init__.py
│   │   └── __init__.pyc
│   ├── models.py   //数据模块,使用 ORM 框架,类似于 MVC 结构中的 Models(模型)
│   ├── models.pyc
│   ├── tests.py    //自动化测试模块,Django 提供了自动化测试功能,在这里编写测试脚本(语句)
│   └── views.py    //执行响应的代码所在模块,是代码逻辑的主要地点,项目中大部分代码均在此编写
├── db.sqlite3
├── manage.py      //与项目进行交互的命令行工具集入口(项目管理器),命令行输入 python manage.py 可以查看对应的命令
└── myblog          //项目的一个容器,包含项目最基本的一些配置,目录名称不建议修改
    ├── __init__.py
    ├── __init__.pyc
    ├── settings.py  //项目的总配置文件,里面包含了数据库、Web 应用、时间等各种配置
    ├── settings.pyc
    ├── urls.py     //URL 配置文件,Django 项目中所以地址(页面)都需要我们自己去配置其 URL
    ├── urls.pyc
    ├── wsgi.py
    └── wsgi.pyc    //WSGI(Python Web Server Gateway Interface):Python 服务器网关接口,Python 应用与 web 服务器之间的接口

settings.py 文件介绍

BASE_DIR:项目的根目录

SECRET_KEY:项目的安全码,必须要有,创建项目的时候会自动生成

DEBUG:调试,开发过程中设置为 True 可以方便在前端页面看到错误信息;在生产环境中需要设置为 False

ALLOWED_HOSTS:设置浏览器访问的域名,设置完成后,只可通过该域名访问网站

INSTALLED_APPS:项目具有的应用,当我们写一个新的应用的时候,需要在这里添加

MIDDLEWARE:中间件(Django 自带的一些工具集,一般不需要管它)

ROOT_URLCONF:也就是 urls,表示 urls 这个配置文件

TEMPLATES:模板的配置文件

WSGI_APPLICATION:设置成模块,如 init 一样的功能

DATABASES:数据库配置

LANGUAGE_CODE:语言

TIME_ZONE:时区

STATIC_URL:静态文件的地址

创建一个页面(响应)

编辑 blog.views

每个响应对应一个函数,函数必须返回一个响应。

函数必须存在一个参数,一般约定为 request

每一个响应(函数)对应一个 URL

配置 URL

编辑 urls.py

每个 URL 都以 url 函数的形式写出来

url 函数放在 urlpatterns 列表中

url 函数三个参数:URL(正则),对应方法,名称

第二种 URL 配置方式

在根 urls.py 中引入 include

在 APP 目录下创建 urls.py 文件,格式与 urls.py 相同

根 urls.py 中 url 函数第二个参数改为 include('blog.urls')

根 urls.py 针对 APP 配置的 URL 名称是该 APP 所有 URL 的总路径

配置 URL 时注意正则表达式结尾符号 $ 和 /

什么是 Templates

HTML 文件

使用 Django 模板语言(Django Template Language,DTL)

可以使用第三方模板(如 jinja2 )

开发第一个 template

在 APP 根目录下创建名为 templates 的目录。

在该目录下创建 HTML 文件。

在 views.py 中返回 render(),三个参数:request、需要渲染的 HTML 、传的数据。

render() 函数中支持一个 dict 类型参数,该字典是后台传递到模板的参数,键为参数名,在模板中使用 {{参数名}} 来直接使用。

Django 查找 template 的问题

问题: Django 按照 INSTALLED_APPS 中的添加顺序查找 templates,不同 APP 下 templates 目录中的同名 .html 文件会造成冲突。

解决:在 APP 的 templates 目录下创建以 APP 名为名称的目录,将 HTML 文件放入新创建的目录下。

Models 介绍

通常,一个 Model 对应数据库的一张数据表,在 Django 中 Models 以类的形式表现,它包含了一些基本字段,以及数据的一些行为。这种和数据库之间映射关系,被称为 ORM 即对象关系映射(Object Relation Mapping),实现了对象和数据库之间的映射,隐藏了数据库访问细节,不需要编写 SQL 语句。

编写 Models

在应用根目录下创建 models.py,并引入 models 模块;创建类,继承 models.Model,该类即是一张数据表,然后在类中创建字段。

字段即类里面的属性(变量),创建方式如下:

attr = models.CharFiled(max_length=64) //CharFiled为参数类型,参数类型里有必传参数,还有可选参数,这里的 max_length 是必传参数

生成数据表

命令行进入 manage.py 同级目录,执行 python manage.py makemigrations app名(app名为可选参数),如果不指定,那么对目录下所有应用都生成数据表。

然后,再执行 python manage.py migrate

查看

Django 会自动在 app/migrations/ 目录下生成移植文件

执行 python manage.py sqlmigrate 应用名 文件id 查看 SQL 语句

默认 sqlite3 的数据库在项目根目录下 db.sqlite3

页面呈现数据

在 views.py 中 import models

然后设置:

article = models.Article.objects.get(pk=1)
render(request, page, {'article':article})//不仅仅支持字符串传递,还支持对象传递,如这里的对象传递

Admin 简介

Admin 是 Django 自带的一个功能强大的自动化数据管理界面,被授权的用户可以直接在 Admin 中管理数据库,Django 提供了许多针对 Admin 的定制功能。

配置 Admin

创建用户:

python manage.py createsuperuser //创建超级用户

Admin 入口:

localhost:8000/admin/

修改 settings.py 中 LANGUAGE_CODE='zh_Hans'

配置应用

在应用下 admin.py 中引入自身的 models 模块(或里面的模型类)

编辑 admin.py : admin.site.register(models.Article)

使用 Admin

修改数据:

进入 Admin 的管理页面

点击 Article 超链接进入 Article 列表页面

点击任意一条数据,进入编辑页面进行修改

修改数据默认显示名称

在 Article 类下添加一个方法

根据 python 版本选择 __str__(self)__unicode__(self)

在 Article 类下设置如下:

def __unicode__(self):
        return self.title

Django 中的超链接

超链接目标地址

href 后面是目标地址

template 中可以用 "{% url 'app_name:url_name' param %}" 其中,app_name 和 url_name 都在 url 中配置

再配 URL

url 函数的名称参数

1.根 urls ,写在 include() 的第二个参数位置,namespace = 'blog'

2.应用下,则写在 url() 的第三个参数位置, name = 'article'

主要取决于是否使用 include 引用了另一个 url 配置文件

博客撰写页面

编辑响应函数

使用 request.POST['参数名'] 获取表单数据

models.Article.objects.create(title, content) 创建对象

涉及 POST 方法提交表单的,前端页面加上 {% csrf_token %}

修改数据

article.title = title

article.save()

补充

templates 过滤器

  • 什么是过滤器?

    • 写在模板中,属于 Django 模板语言
    • 可以修改模板中的变量,从而显示不同的内容
  • 怎么使用过滤器?

    • {{ value | filter }}
    • 例如 {{ list_nums | length }}
    • 过滤器可叠加:{{ value | filter1 | filter2 | filter3 | ...}}

Django shell

  • 什么是 Django shell ?

    • 它是一个 python 的交互式命令行程序
    • 它自动引入了我们的项目环境
    • 我们可以使用它与我们的项目进行交互
  • 如何使用 Django shell ?

    • python manage.py shell
    • 执行如下命令:
from blog.models import Article
Article.objects.all()
  • 有什么用?
    • 我们可以使用 Django shell 来进行一些调试工作
    • 测试未知的方法

Admin

  • 创建 admin 配置类

    • class ArticleAdmin(admin.ModelAdmin)
    • 注册:admin.site.register(Article, ArticleAdmin)
  • 显示其他字段

    • list_display = ('title', 'content')
    • list_display 同时支持 tuple 和 list
  • 过滤器

    • list_filter = ('pub_time',)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容