创建项目
打开命令行,进入想要安置项目的目录。
命令行输入: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',)
网友评论