记录一些Django基础和使用中遇到的问题:
参考:《Django文档》
目录:
1. 数据库的连接配置:
2. url的配置以及搜索路径
3. Template的配置以及搜索路径
4. Model-View-Template三者之间的交互
---------------------------------------------------------------------------------------------------------------------------------------------------------
1. 数据库的连接配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql',
'NAME': 'my_blog', # 数据库名字(需要先创建)
'USER': 'my_blog', # 登录用户名
'PASSWORD': 'myblog123', # 密码
'HOST': 'localhost', # 数据库IP地址,留空默认为localhost 我把‘’改为'localhost'就可以,不知为啥
'PORT': '5432', # 端口
}
}
2. url的配置以及搜索路径
my_web
--ll_env
--my_blog (项目文件夹)
--myapp
--urls.py
--views.py
--model.py
--setting.py
--admin.py
--my_blog
--settings.py (主配置文件)
--urls.py (第一级url设置,对应http://localhost:8000)
--manage.py
举例说明,当请求网址localhost:8000/my_blog/myapp/时,Django首先加载settings.py配置文件中,找到ROOT_URLCONF
ROOT_URLCONF = 'my_blog.urls' #进行url匹配开始的地方
但是我的文夹目录中有多个my_blog目录,具体指的是哪个my_blog目录下的urls.py文夹呢,这就要看BASE_URLCONF,它设置了默认的路径开始的位置(根目录),后面的view视图和template模板有用路径的也是默认从这里开始(如果没有特殊设置)在上面的root_urlconf路径基础上自动加上BASE_DIR路径:/my_web/my_blog/my_blog/urls.py
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) #例子中项目文件夹,也就是manage.py所在的文件夹
Djiango将把网址请求:‘my_blog/myapp/’ 和 root_urlconf所指定的urls.py文夹中的urlpatterns进行匹配,如果匹配到路径,则进入到my_blog这个app下,找到下一级的urls.py文夹,并将原来的请求中的'my_blog'去掉,剩下'myapp/'用它来和当前urls.py文件中的urlpatterns进行匹配,并执行对应的视图函数。。。
3. Template的配置以及搜索路径
在settings.py文件中,还有一个是对TEMPLATES参数设定,该参数决定了视图函数去哪里可以找到对应的模板template
可以采用Django的默认设置,也可以自定义模板的存放位置,先看下view如果指定模板:
from django.shortcuts import render
# Create your views here.
def home(request):
return render(request,'home.html') #在TEMPLATE配置基础上,再确定模板所在位置
默认设置:'DIRS' : [] (该选项为空)
django将默认的查找每个已注册的app目录下的子目录,确认是否存在该模板,django建议的目录格式:myapp/template/myapp/home.html,这样,所有的模板文件(.html)将分散在每个app的子目录下
自定义设置:'DIRS': [os.path.join(BASE_DIR, 'templates')]
在根目录下,另外新建一个templates目录,并将该目录指定为template的搜索路径,后续所有的模板文件都放在这里面
TEMPLATES = [
{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [os.path.join(BASE_DIR, 'templates')],
'APP_DIRS': True,
'OPTIONS': {
'context_processors': [
'django.template.context_processors.debug',
'django.template.context_processors.request',
'django.contrib.auth.context_processors.auth',
'django.contrib.messages.context_processors.messages',
],
},
},
]
3. 创建Model的步骤
- 创建模板文件
- 创建迁移文件,相当于创建了一个可以操作的数据库的脚本,但还没运行,存放在本地(每个app下面的migrations文件中)
python manage.py makemigration app_name
- 正式执行数据库迁移操作(各种SQL语句)
python manage.py migration
- 在admin.py文件中注册这个model,这样在http://localhost:8000/admin这个站点上才能看到你定义的这个model
4. Model-View-Template三者之间的交互
用户输入特定网址或者点击某个超链接,想要访问某个Model。在输入的网址中或者template中的定义的超链接中包含了Model的相关信息,urls.py文件通过urlpatterns匹配过程中,获得的这个信息,或者可以理解为urlpatterns定义了某个变量(名字随意)来接收这个信息。这个信息将被view视图函数获取,并对相关的Model进行处理后,指定呈现的template模板(利用view提供的数据,决定如何呈现数据),返回给客户