Django base

[TOC]

1. 创建项目

django-admin startproject server_test
# 基本文件树如下
server_test/
    manage.py
    server_test/
        __init__.py
        settings.py
        urls.py
        wsgi.py

####################################################
# manage.py 基本的命令行工具
# inner server_test文件夹是真正的django项目
# __init__.py 标识python package
# setting.py 项目配置信息
# urls.py 项目url的声明,是一个内容表
# wsgi.py uwsgi服务的入口

收集静态文件

在setting.py文件中添加

然后执行

根据nginx的配置,在主目录下创建script/文件夹,创建uwsgi.ini uwsgi.log uwsgi.sock 文件,创建media文件夹,存放静态媒体信息

2.创建第一个app

Django是基于MTV Design Partten Model Template and View

  • Model : 数据模型,构造了一个数据接口,包含了数据的所有特征,可以获取数据,验证数据,控制数据的行为可以在忽略底层数据库的构造情况下进行数据操作

  • Template: 显示层,包含了显示相关的决策:网页上的元素该如何显示

  • View: 模型和模板之间的桥梁,处理逻辑层面

在一个django项目中可以包含多个app,同时一个app可以包含在多个项目中,创建的项目位于根目录下

创建第一个view

在polls/view.py中添加内容:

为了调用该view,需要将其映射到一个url上,在app目录下创建urls.py,引入该view,同时将app的urls引入项目的urls中

3.database config

django默认使用的数据库是sqllite,在配置文件中指定其位置在项目主目录下,还支持oracle mysql postgresql

./server_test/setting.py文件中还可以设置时区:

配置文件中的installed_apps 是该项目需要使用的app,django app是类似于插件的方式安装的,需要显式添加到配置文中去

一些app至少需要一个table,所以需要进行数据库迁移

创建models

在polls/models.py文件中添加

每一个数据模型都有相应的变量,作为数据模式,会自动添加id作为主码,注意不可以用self来标注模式,否则模式下只有id一项属性,变量名即为属性名,后面是数据类型,同时可以添加外码,表示每一个chioce都与一个question对应

在配置文件中添加app后即可进行数据库的迁移

通过执行该命令告诉django对model进行了更改,数据库的模式发生了变化,所以产生了一个控制迁移的文件polls/migrations/0001_initial.py 里面记录了迁移的步骤,可以通过命令得到相应的sql

可以通过check命令检查是否存在问题.此时并没有进行数据库的实际改动

命令行查看数据库

4.创建管理员

5.添加更多views

可以在已经创建的app中加入更多的views polls/views.py 文件中添加相应的函数实现,然后在新创建的poll/urls.py 中添加

当请求获取pllos/22 django会加载根项目的urls.py 由于在里面的urlpatterns=[path('polls/', include(polls.urls))] 将app polls中的urls记载到里面,回进入polls/url.py 中查找,就可以找到detail view

6.创建模板

为了避免对视图进行硬编码,可以使用模板进行定义,在polls文件夹下创建templates文件夹,django会自动在该文件夹寻找模板.Django项目关于模板的设置在默认setting.py 文件中,描述了项目如何记载呈送模板.定义了默认的template backendAPP_DIRS=True ,会在每个INSTALLED_APP中的子文件夹寻找templates文件夹作为模板文件夹

所以在polls app中的模板要放在 poll/templates/polls/ 文件夹中

  • 所有的判断和循环语句都需要使用{%%}进行嵌套

  • 用{% * %} 表示条件结束

  • 输出变量值时需要用

  • 其他语法根据html

添加到view

获取模板的方式:

  • 使用loader加载模板,然后使用模板调用render函数,将所需要的参数以dict形式传递

  • 使用shortcut.render 接受三个参数,httprequest templates cointext,返回一个根据给定模板和内容的HttpResponse 对象

获取404:

  • 可以使用抛出异常的方式得到404

  • 使用shortcut.get_object_or_404(), 给定对象model 以及选择条件

Templates urlspolls

  • 当使用一个连接以<a href="/polls/{{question.id}/">...</a> 的形式出现在模板中时,采用的是硬编码的形式,当项目中的url变化时,需要进行大量的更改,不符合复用原则,可以使用在polls/url.py中定义的 url `

    ` ,如果需要更改url时只需要在urls.py中修改,不需要改动templates

  • 命名域的url:

    当一个项目有很多app时,可能出现重名状况,所以需要在url前添加命名域,这时需要在polls/urls.py中添加 app_name='polls' 既可以在url中指定命名域

7.使用生成视图,减少代码量

detail() result() 视图较为简单,直接提供一个数据,index也只提供一个列表.这些视图展示了web开发的一个基本样例:根据url参数从数据库获取数据并显示,加载一个模板,并且返回一个rendered template ,django提供了一个便捷的方式去使用views ------generic

  • 修改URL conf

  • 更改views

主要使用了generic.ListView generic.DetailView ,以这两个类作为基类,需要注意的是DetaliView 需要从url获取的主码是pk 所以需要将其进行更改

对于views进行更改时,这两个类需要提供一个model 参数指明所使用的数据模型, template_name 参数指明模板

Attention:

之前的模板中使用lasted_question_list 作为参数列表,对于DetailView,再使用Question model 时会自动生成内容变量question_list ,所以必须对该参数进行改写

8. 使用静态文件

通常使用的静态文件包括 images, js, css django.contrib.staticfiles 收集每个app的静态文件到特定文件夹,该app包含在INSTALLED_APPS中.django的STATICFILES_FINDERS 设置了寻找静态文件的方式默认是

首选项是在STATICFILES_DIR ,可以在项目的setting.py中设置STATICFILES_DIRS=[os.path.join(BASE_DIR, 'static/')] ;如果没有该设置,使用第二个默认选项,会在每个app的一个 子文件夹static中寻找静态文件,而最常用的文件结构是在static文件夹下再建立app/ 放置静态文件

可以使用样式表(polls/static/polls/style.css)

然后在模板中引入css:

9.定制管理员站点 admin

:electric_plug: 关于模板文件组织:

和static files类似,所有的模板可以放在同一个文件夹中,但是分属于不同app的模板和静态文件要放在每个子文件夹中,可以在醒目的根目录下创建templates/admin 来放置admin站点的模板文件,需要在setting文件中设置

可以修改base_site.html模板,更改站点header,对于admin中的详细内容需要在polls/admin.py 中进行修改

Last updated

Was this helpful?