项目结构介绍
manage.py
app01:(这个是自己的APP应用)
__init__.py
settings.py
urls.py
wsgi.py
manage.py
- 与项目进行交互的命令行工具集的入口
- 项目管理器
- 执行Python manage.py来查看所有命令
启动一个服务器
- python manage.py runserver [9999]
app01目录
- 项目的一个容器
- 包含项目的最基本的一些配置
- 目录名称不建议修改,需要修改配置文件
wsgi.py
- WSGI:Python服务器网关接口
urls.py
- URL配置文件
- Django项目中所有地址页面都需要我们自己去配置其URL
setting.py
- BASE_DIR:项目目录
- SECRET_KEY:秘钥
- DEBUG:调试模式
- ALLOWED_HOSTS:允许访问的地址,不写默认所有
- INSTALLED_APPS:自己创建的应用必须写入这里,要不然不识别
- MIDDLEWARE:中间件(一些工具集)
- ROOT_URLCONF:URL的根文件的配置文件,指向的是urls.py这个文件
- TEMPLATES:模板的配置
- WSGI_APPLICATION:跟WS相关的一律先不管
- DATABASES:数据库配置、默认用的SQLite3
- AUTH_PASSWORD_VALIDATORS:密码认证
- LANGUAGE_CODE:语言
- TIME_ZONE:时区
- USE_I18N
- USE_L10N
- USE_TZ
- STATIC_URL:静态文件地址JS等
init.py
- 模块文件,有了这个,app01目录就变成了一个模块
- Python声明模块的文件
- 内容默认为空
创建应用
- 打开命令行,进入项目中的manage.py同级目录
- 命令行输入:python manage.py startapp app01(应用名不能和项目名一致)
- 把应用名添加到settings.py中的INSTALLED_APPS里(重点)
blog目录介绍
migrations
__init__.py
__init__.py
admin.py
apps.py
models.py
tests.py
views.py
migrations
- 数据移植(迁移)模块(和数据库有关)
admin.py
- 该应用的后台管理系统配置
apps.py
- 当前应用的一些配置Django1.9之后才会用到
models.py
- 数据模型模块
- 使用ORM框架(Django封装好了)
- 类似于MVC中的Models
tests.py
- 自动化测试模块
- Django提供了自动化测试功能
- 在这里编写测试脚本(语句)
views.py
- 执行响应的代码所在的模块
- 代码逻辑处理的主要地点
- 项目中大部分的代码在这里编写
创建第一个页面(响应)
在blog.views中编写代码返回响应
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return HttpResponse("Hello World!")
----------------------------
每一个响应对应一个函数,函数必须返回一个响应
函数必须存在一个参数,一般约定为request
每一个响应(函数)对应一个URL
在urls.py中配置URL
import blog.views as bv
'''
第一个参数用正则:
第二个参数用函数名,每一个url都对应一个函数
'''
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^index/', bv.index),
]
----------------------------
每一个URL都以url的形式写出来
url函数放在urlpatterns列表中
url函数三个参数:URL(正则),对应方法,名称
第二种配置url方式
from django.conf.urls import include
urlpatterns = [
url(r'^blog/', include('blog.urls')),
]
另外在blog目录下创建一个文件urls.py文件
from django.conf.urls import url
from . import views
urlpatterns = [
url(r'^index/$', views.index),
]
注意事项
1. 根urls.py针对APP配置URL名称,是该APP所有URL的总路径
2. 配置URL时注意正则表达式结尾符$和/的问题
Templates介绍
什么是 Templates
- HTML文件
- 使用了Django模板语音(Django Template Language,DTL语言)
- 可以使用第三方模板(如Jinja2)
如何修改模板引擎
- 在settings.py文件中找到 TEMPLATES ,修改BACKEND就可以了
开发第一个 Templates
- 在项目根目录下创建一个叫Templates的目录
- 在该目录下创建HTML文件
- 然后在views中返回一个render
render
from django.shortcuts import render
from django.http import HttpResponse
def index(request):
return render(request,"index.html")
DTL初步使用
- render()函数中支持一个dict类型的参数
- 该字典是后台传递到模板的参数,键位参数名
- 在模板中使用{{参数名}}来直接使用
解决index重名问题(由于导入APP名字的先后顺序导致的问题)
- 在APP的Templates目录下创建以APP名为名称的目录
- 然后将HTML文件都放入这个文件中
- 最后修改views第二个参数,HTML文件放在项目文件夹下
Models
- 通常,一个Models对应数据库的一张表
- Django中的Models以类的形式表现
- 它包含了一些基本的字段以及数据的一些行为
ORM
- 对象关系模型映射
- 实现了对象与数据库之间的映射
- 隐藏了数据访问的细节,不需要编写SQL语句
编写Models
- 在应用根目录下创建一个Models.py,并引入Models模块
- 创建类,继承models.Model,该类即是一张数据表
- 在类中创建字段
生成数据表
- 命令行中进入manage.py同级目录
- 执行python manage.py makemigrations [app名(可选)] 不写默认项目下所有应用都会进行数据迁移
- 再执行python manage.py migrate 数据迁移
查看生成的数据表
- Django会自动在app/migrations/目录下生成移植文件
- 执行python manage.py sqlmigrate 应用名 文件id 查看SQL语句
配置Admin(Django自带后台管理系统)
- python manage.py createsuperuser 创建超级用户
- 用户名随便取
- 邮箱随便
- 密码必须8位以上
- localhost:8000/admin admin入口
- 修改settings.py中LANGUAGE_CODE = “zh_Hans” 管理界面变成中文
配置应用
- 在应用admin.py中引入自身的models模块(或里面的模型类)
- 编辑admin.py:admin.site.register(models.Article)
admin.py中的代码
from .models import Article
admin.site.register(Article)
修改数据默认显示名称
- Models–>Article类中添加str方法
- return …
个人博客开发
- 博客主页面
- 博客文章内容页面
- 博客撰写页面
主页面内容
- 文章标题列表,超链接
- 发表博客按钮(超链接)
列表编写思路
- 去除数据库中所有的文章对象
- 将文章对象们打包成列表,传递到前端
- 前端页面把文章以标题超链接的形式逐个列出
模板For循环
{% for xx in xxs %}
HTML语句
{% endfor %}
文章内容
- 标题
- 文章内容
- 修改文章的按钮(超链接)
URL传递参数
- 参数卸载响应函数中request后面,可以有默认值
- URL正则表达式:r”^/article/(?P[0-9]+)/$”
- URL正则中的组名必须和参数名一致,不然会报错
Django中的超链接
超链接目标地址
- href后面是目标地址
- template中可以用”{% url ‘app_name:url_name’ param %}”
- 其中app_name和url_name都在url中配置
第二种URL配置方式
- 根urls,写在include()的第二个参数位置,namespace=”blog”
- 应用下则写在url()的第三个参数位置,name=”article”
- 这两种配置方式主要取决于是否使用include引用了另一个url配置文件
页面内容
- 标题编辑栏
- 文章内容编辑区域
- 提交按钮
编辑响应函数
- 使用request.POST[‘参数名’]获取表单数据
- models.Article.objects.create(title,content)创建对象
两个编辑页面的区别
- 新文章为空,修改文章有内容
- 修改文章页面有文章对象
- 文章的ID
补充内容
Templates过滤器
- 写在模板中,属于Django模板语言
- 可以修改模板中的变量,从而显示不同的内容
怎么使用过滤器
{{value | filter}}
例子:{{list_nums | length}}
过滤器可叠加:{{value | filter1 | filter2 | ...}}
Django Shell
- 一个Python的交互式命令行程序
- 它自动引入了我们项目环境
- 我们可以使用它与我们的项目进行交互
怎么使用Django Shell
- python manage.py shell
- from blog.models import Article
- Article.objects.all() 返回值是Article的str返回的数据
有什么用?
- 我们可以使用Django shell来进行一些调试工作
- 测试未知的方法
Admin加强
创建admin配置类
- class ArticleAdmin(admin.ModelAdmin)
- 注册admin.site.register(Article,ArticleAdmin)
创建类的代码
from django.contrib import admin
from .models import Article
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title',"content",'pub_time')
admin.site.register(Article,ArticleAdmin)