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 backend 将APP_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?