- 创建django项目
- 创建app目录
- 静态文件以及模板路径的配置
- 第一个django程序
- 模板渲染入门
一、创建django项目
首先执行pip3 install django,接下来有两种方式创建django项目:
第一种是在命令行中执行:django-admin startproject 工程名
第二种是直接使用pycharm,在新建项目的时候选择django,这种方式创建django项目的时候需要选择一个空目录
而且pycharm需要安装专业版的,社区版是没有这个功能的。
一个完整的django项目的目录结构如下:
项目名
--------项目名
----- __init__.py
------settings.py#配置文件
------url.py#URL对应关系
------wsgi.py
---------manage.py#管理Django程序
---------static(自己创建的)#存放css,js等静态文件
--------templates#存放html等模板文件
--------db.sqlites#存放数据库信息
二、创建APP
因为一个django工程里面可能包括了很多子功能,所以可以在根目录下建立多个app目录
建立app的方式:python manage.py startapp app的文件名称
一个完整的app的目录结构如下:
app文件名
--------migrations #存放数据库的表结构的更改信息
--------__init__.py
-------__admin__.py #Django提供的后台管理
------apps.py#配置当前的app
------models.py#ORM,写制定类,通过命令创建数据库结构
------tests.py#单元测试
------views.py #业务代码
三、静态文件以及模板路径的配置
在编写第一个django程序之前,首先需要在django项目的同名目录下的settings.py进行以下配置:
1、配置模板的路径:
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',
],
},
},
]
2、配置静态目录:
static
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
配置好静态目录之后,在模板的html文件中就可以引入静态目录中的css文件,如下:
<link rel="stylesheet" href="/static/commons.css" />
需要注意的是,最好文件的存放路径就不要变,然后就按照上面这样子写就不会错。
四、第一个django程序
首先需要在django同名目录下的url.py中定义路由,url(url路径,views中对应的函数名)
然后需要在url中导入views,例如:
from django.contrib import admin
from django.conf.urls import url
from cmdb import views
urlpatterns = [
# path('admin/', admin.site.urls),
url('admin/',admin.site.urls),
url('login/',views.login),
url('home/',views.home)
]
接下来需要在app下的views.py中根据具体的业务逻辑定义视图函数,参数request是必须的,request中封装了很多东西
简要介绍一下:
①通过request.method可以知道页面提交的方式是get还是post
②如何获取数据:
如果页面是通过get提交的,例如用户在地址栏中输入?nid=123&name=alex,那么可以通过reques.GET.get('',None)获取请求发来的数据
如果页面是通过post提交的,也可以通过request.POST.get('',None)获取提交的表单中的信息
3、如何把数据渲染到页面:
# return HttpResponse("字符串")
# return render(request, "HTML模板的路径")
# return redirect('/只能填URL')
四、模板渲染
1、{{变量名}}
在html文件中:
<body>
<div>{{current_user}}</div>
</body>
对应的视图函数中,需要在return的时候使用render方式返回,在里面传入一个变量,并赋值:
def func(request):
return render(request, "index.html", {'current_user': "alex"})
以上的代码执行结果就等价于:
<html>
..
<body>
<div>alex</div>
</body>
</html>
2、使用for循环,if等进行模板渲染
使用{% for n in 变量名%}开始,使用{%endfor%}结束,使用{%if ...%}开始,{endif}结束
html文件中的内容:
<html>
..
<body>
<div>{{current_user}}</div>
<ul>
{% for row in user_list %}
{% if row == "alex" %}
<li>{{ row }}</li>
{% endif %}
{% endfor %}
</ul>
</body>
</html>
3、获取数组或者字典中的某个变量(***)
view视图函数中定义了几种变量:
def func(request):
return render(request, "index.html", {
'current_user': "alex",
'user_list': ['alex','eric'],
'user_dict': {'k1': 'v1', 'k2': 'v2'}})
注意一下如何获取user_list中的第一个值,或者user_dict中的K1对应的值这种获取方式(用点的方式,和vue.js很像):
<html>
..
<body>
<div>{{current_user}}</div>
<a> {{ user_list.1 }} </a>
<a> {{ user_dict.k1 }} </a>
<a> {{ user_dict.k2 }} </a>
</html> </body>
另外一个结合for循环的例子:
render(request, "模板的文件的路径", {'obj': 1234, 'k1': [1,2,3,4],"k2": {'name': '张扬','age': 73}})
如何循环输出k2里面的每一个key,value
{% for row in k2.keys %}
{{ row }}
{% endfor %}
{% for row in k2.values %}
{{ row }}
{% endfor %}
{% for k,v in k2.items %}
{{ k }} - {{v}}
{% endfor %}