初学:投票教程(一)
django-admin startproject project_namepython manage.py runservcer + 端口:端口据说,默认端口是8000,所以访问网址是https://127.0.0.1:8000/,如果不加端口可以访问吗?这个端口意味着服务器监听的端口,也就是外来访问进入的“门”。
python manage.py startapp app_name据说,app可以存放在任意python path中,是否可以创建时选择路径?当然也可以创建好之后,剪切到其他路径,真的可以放在其他路径里吗?
from django.http import HttpResponse
def index(request):
return HttpResponse('Hello World!')url映射到view的两种方式
(一)
# app_name/urls.py
from django.urls import path
from . import views
urlpatterns = [path('', views.index, name='index')]# project_name/urls.py
from django.urls import include, path
from django.contrib import admin
urlpatterns = [path('app_name/', include('app_name.urls')), path('admin/', admin.site.urls)](二)
到底urlpatterns是如何分割访问的url的?其次path中的name可有可无吗?有什么作用?
在方式一中,是不是进行了两次url的分割匹配?
path详解
route: 类似于正则表达式,用来匹配url中‘?’前的部分,也就是不包括get和post请求
view: 当找到匹配的url后,会调用view并传入一个HttpRequest对象
kwargs:
name: 为url取名,并可以在django任何地方任意地引用它
urlpatterns可能有多个path,每个path匹配一段url后可能会有一些返回值,这些返回值如何组合?还是说只能匹配其中的一个path,一旦匹配处理之后,就会形成结果?name的引用还是没有清楚的概念,不知道如何使用
settings.py文件
Application definition
Database
Internationalization+
在使用应用(不论是默认还是新创)的时候,至少需要在数据库创建一张表,该命令只会创建在INSTALLED_APPS中声明的应用。
创建模型应该是开发web应用的第一步,也就是数据库结构设计和附加的其它元数据
据说Datetime是一个可选选项,所谓可选就是为变量添加一个人类友好的名字,那这个人类友好名到底在什么时候会被使用?是在web界面吗? 这个外键中‘on_delete=models.CASCADE’是什么意思?(好像是一对一的关系,那其他类型如何表示?)
之前有提到过把app应用放进settings中INSTALLED_APPS的,但目前看到使用这一部分的也只有与数据库相关的,所以是否可以理解为不涉及数据库的时候,不放入该列表也可以?
这部分还未涉及到数据库的改变,而是把模型前后变化存储在“迁移”这种形式之中,当再次使用python manage.py migrate命令的时候,才会将这些未执行的迁移与数据库同步。
models.py文件,改变模型。 运行python manage.py makemigrations为模型的改变生成迁移文件。 运行python manage.py migrate来应用数据库迁移。
为什么要存在迁移?直接使用前面的命令,同步到数据不就可以吗?
The reason that there are separate commands to make and apply migrations is because you'll commit migrations to your version control system and ship them with your app; they not only make your development easier, they're also usable by other developers and in production.
据说原因是为了版本开发系统,也就是方便开发,可是暂时还是不能理解。
如果我把models.py定义好,并且把app加入到settings.py中,但是没有做migrate的命令,直接开启运行服务,会报错吗?也即是说,在开启服务时,会不会自动同步数据库?
API,django shell
使用shell的优点还不清楚
之前觉得没什么用,后来发现可以直接操作数据库,也就是说通过migrate,在数据库中建立了表和字段,然后使用shell可以手动添加数据到里面去,当然也可以查询数据库中的数据。可是,做这个应用不是要从别人的访问中得到数据吗?比如说这个投票应用,数据的来源应该是网上访问的人,所以也就是只能通过shell查看一下数据了吧?
django数据库管理:shell
此外也可以使用shell进行查询,基本上还是前面和数据库交互的内容
居然还可以这样操作?那这样来说choice中外键存储的就不是简单的question中的主键值,而是把整个question实例对象作为值
django数据库管理:管理界面
创建管理员账号,运行服务之后,通过类似"http://127.0.0.1:8000/admin/"这样的网址访问管理界面
如果在管理界面看到自己的应用,还要修改
这里的添加应用只是为了让管理人员在可视化的环境下工作吧?即便不进行这一步,是不是也可以完成整个web应用的正常运行呢?
进一步优化视图,视图包括两点:实现特定功能,模板,目前还不知道模板如何使用,视图往往对应不同的网页
在 Django 中,网页和其他内容都是从视图派生而来。
如果说视图指的是网页中对应操作的具体实现,我可以理解,但整个网页U又是如何制作的呢?(虽然已经涉及到前端了),另外前端和视图之前的数据和功能连接是如何实现的呢?
为了将 URL 和视图关联起来,Django 使用了 'URLconfs' 来配置。URLconf 将 URL 模式映射到视图。
此外还有URL调度器,有时间可以详细了解一下。
较复杂的视图
name到底什么用?
视图应该返回HttpResponse对象或者异常,那么如果我要返回一个pdf文件或者一个其他格式的数据,也要放在HTTPResponse对象之中吗?
这里明明是‘pub_date’,为什么前面要加‘-’
如果想要修改网页的样式,就要用到模板了
虽然我们现在可以将模板文件直接放在 polls/templates 文件夹中(而不是再建立一个 polls 子文件夹),但是这样做不太好。Django 将会选择第一个匹配的模板文件,如果你有一个模板文件正好和另一个应用中的某个模板文件重名,Django 没有办法 区分 它们。我们需要帮助 Django 选择正确的模板,最简单的方法就是把他们放入各自的 命名空间 中,也就是把这些模板放入一个和 自身 应用重名的子文件夹里。
确实不能理解其中的意思,主要的问题在于在模板之下的app目录到底是如何起到区分不同模板的,如果是遍历,就会忽略文件名,如果不是,那它说也可以不用这个目录,那找不到目录不会导致报错吗?如何没有问题,很好奇是如何做到的?另外,这个html!?真的看不懂!据说html的`
`结构中可以运行、获取后台代码或值,可以写服务器端代码,但这也太奇怪了,必须了解细节。
Last updated
Was this helpful?