特有模板
实现字符自动替换
html文件中
<span style="color: red;">{{ error_message }}</span>
views.py
render(request, 'login.html', {'error_message': error_message})
----------------------
USER_LIST = [
{"id":1, "username": "Tom", "email": "tom@163.com", "gender": "M"},
{"id":2, "username": "Lucy", "email": "lucy@163.com", "gender": "F"},
{"id":3, "username": "Seven", "email": "seven@163.com", "gender": "M"},
]
# for循环(有开始,有结尾)
{% for row in user_list %}
<tr>
<td>{{ forloop.counter }}</td> #从1开始计数
<td>{{ forloop.counter0 }}</td> #从0开始计数
<td>{{ forloop.revcounter }}</td> #倒序至1
<td>{{ forloop.revcounter0 }}</td> #倒序至0
<td>{{ forloop.first }}</td> #是否是第一个
# 获取字典的值
<td>{{ row.username }}</td>
<td>{{ row.gender }}</td>
<td>{{ row.email }}</td>
</tr>
{% endfor %}
-----------------------
views.py
def func(request):
return render(request, 'index.html',
{"current_user": "Look",
"user_list": ['one', 'two'],
"user_dict": {"k1": 'v1', "k2": 'v2'},
"age":10})
html文件
<html>
<body>
# 变量
<div>{{ current_user}}</div>
# 列表
<a>{{ user_list.0 }}</a>
<a>{{ user_list.1 }}</a>
# 字典获取单个值
<a>{{ user_dict.k1 }}</a>
<a>{{ user_dict.k2 }}</a>
# 字典获取key
<ul>
{% for k in user_dict.keys %}
<li>{{ k }}</li>
{% endfor %}
</ul>
# 字典获取value
<ul>
{% for v in user_dict.values %}
<li>{{ v }}</li>
{% endfor %}
</ul>
# 字典获取key、value
<ul>
{% for k, v in user_dict.items %}
<li>{{ k }}:{{ v }}</li>
{% endfor %}
</ul>
# QuerySet,元素为对象的场景
<h3>部门信息(对象)</h3>
{% for row in v1 %}
<li>{{ row.id }} {{ row.name }} {{ row.name_en }}</li>
{% endfor %}
# 条件语句,可嵌套
{% if age %}
<a>有年龄</a>
{% if age > 16 %}
<a>老男人</a>
{% else %}
<a>小鲜肉</a>
{% endif %}
{% else %}
<a>无年龄</a>
{% endif %}
# for循环与条件语句混合使用
{% for row in user_list %}
{% if row == "spring" %}
<a>{{ row }}</a>
{% endif %}
{% endfor %}
</body>
</html>
请求生命周期
用户发送请求-》 路由系统匹配(工程urls.py)-》 视图函数(app.views.py)-》
DB + 模板(templates)+ 静态文件(static)-》 用户
用户-》 URL对应关系(匹配) -》 视图函数 -》 返回用户字符串
用户-》 URL对应关系(匹配) -》 视图函数 -》 打开一个HTML文件,读取内容
- 返回用户的本质:字符串
工程创建流程
-
创建工程
- django-admin startproject 工程名
-
创建app
- cd 工程名
- python manage.py startapp app名
-
静态文件配置
- project.settings.py
- STATICFILES_DIRS = ( os.path.join(BASE_DIR, 'static'),)
-
模板路径配置
TEMPLATES -》 'DIRS': [os.path.join(BASE_DIR, 'templates')]
-
settings.py中
- middleware中注释掉csrf
-
定义路由规则
- urls.py login --》 函数名
-
定义视图函数
- app的views.py
def func(request): # request.method GET/POST # http:/127.0.0.1:8000/home?nid=123&name=spring # 获取请求发来的数据 request.GET.get("nid", None) request.POST.get("", None) return HttpResponse("字符串") return render(request, "HTML模板的路径") return redirect("/只能填URL的路径")
-
模板渲染
- 特殊的模板语言
- 渲染时间:返回给用户数据之前
- 效果:用户拿到的数据,都是渲染后的
数据管理
课堂练习
Mysql
SQLAlchemy
主机管理(8列):
- IP
- 端口
- 业务线
- ....
用户表:
用户名
密码
功能:
1. 登陆
2. 主机管理页面
1. 查看所有的主机信息(4列)
2. 增加主机信息(8列) 模态对话框
3. 查看详细信息
def detail(request):
nid = request.GET.get("nid")
v = select * from tb where id=nid
4. 删除
def delete_host(request):
nid = request.POST.get("nid")
delete from tb where id=nid
return redirect('/home')
主机管理
作业
通过前端页面实现操作后台数据库:实现增删改查
实现主机分组
实现不同的用户可以管理不同的主机
在前端可以对主机信息实现增删改查