web框架
web框架: 别人已经设定好的一个web网站模板,你学习它的规则,然后“填空”或“修改”成你自己需要的样子。
一般web框架的架构是这样的:
其它基于python的web框架,如tornado、flask、webpy都是在这个范围内进行增删裁剪的。例如tornado用的是自己的异步非阻塞“wsgi”,flask则只提供了最精简和基本的框架。Django则是直接使用了WSGI,并实现了大部分功能。
Django模板标签
1. if/else 标签
# 基本语法格式:
{% if condition %}
... display
{% endif %}
# 或者:
{% if condition1 %}
... display 1
{% elif condition2 %}
... display 2
{% else %}
... display 3
{% endif %}
# {% if %} 标签接受 and , or 或者 not 关键字来对多个变量做判断 ,或者对变量取反( not ),例如:
{% if athlete_list and coach_list %}
athletes 和 coaches 变量都是可用的。
{% endif %}
2. for 标签
# 循环语法是 for X in Y ,Y是要迭代的序列,而X是在每一个特定的循环中使用的变量名称
<ul>
{% for athlete in athlete_list %}
<li>{{ athlete.name }}</li>
{% endfor %}
</ul>
# 给标签增加一个 reversed 使得该列表被反向迭代:
{% for athlete in athlete_list reversed %}
...
{% endfor %}
# 可以嵌套使用 {% for %} 标签:
{% for athlete in athlete_list %}
<h1>{{ athlete.name }}</h1>
<ul>
{% for sport in athlete.sports_played %}
<li>{{ sport }}</li>
{% endfor %}
</ul>
{% endfor %}
3. ifequal/ifnotequal 标签
# {% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值
{% ifequal user currentuser %}
<h1>Welcome!</h1>
{% endifequal %}
# 和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签
{% ifequal section 'sitenews' %}
<h1>Site News</h1>
{% else %}
<h1>No News Here</h1>
{% endifequal %}
4. 注释标签
# Django 注释使用 {# #}
{# 这是一个注释 #}
5. include 标签
# {% include %} 标签允许在模板中包含其它的模板的内容
{% include "nav.html" %}
6. extends 标签
## 继承了base.html文件
{% extends "base.html" %}
7. 过滤器
# 模板过滤器可以在变量被显示前修改它,过滤器使用管道字符
## 如下,{{ name }} 变量被过滤器 lower 处理后,文档大写转换文本为小写
{{ name|lower }}
# 过滤管道可以被* 套接* ,既是说,一个过滤器管道的输出又可以作为下一个管道的输入
## 如下,将第一个元素并将其转化为大写
{{ my_list|first|upper }}
# 有些过滤器有参数。 过滤器的参数跟随冒号之后并且总是以双引号包含
## 如下,将显示变量 bio 的前30个词
{{ bio|truncatewords:"30" }}
# 其他过滤器:
## length : 返回变量的长度
## addslashes : 添加反斜杠到任何反斜杠、单引号或者双引号前面
## date : 按指定的格式字符串参数格式化 date 或者 datetime 对象,例如
{{ pub_date|date:"F j, Y" }}
Django基本命令
- 创建工程下project
django-admin startproject project_name
- 在工程下创建应用app
python manage.py startapp app_name
- 启动django项目
python manage.py runserver
或
python manage.py runserver 8000
或
python manage.py runserver 0.0.0.0:8000
通过指定一个 IP 地址,你可以告诉服务器–允许非本地连接访问。 如果你想和其他开发人员共享同一开发站点的话,该功能特别有用。
0.0.0.0
这个 IP 地址,告诉服务器去侦听任意的网络接口
- 同步更新数据库
python manage.py makemigrations
python manage.py migrate
- 清空数据库的表数据,只留表结构
python manage.py flush
- 创建超级管理员
python manage.py createsuperuser
- 修改用户密码
python manage.py changepassword username
- 导出导入数据
python manage.py dumpdata appname > appname.json
python manage.py loaddata appname.json
- 项目环境终端
python manage.py shell
- 数据库命令行
python manage.py dbshell
- 更多命令
python manage.py
model基本使用
views.py
from django.shortcuts import render,HttpResponse
from karlapp import models
def login(request):
if request.method == 'GET':
a = [1,]
obj_li = models.UserInfo.objects.all()
# obj_li = models.UserInfo.objects.filter(username='test')
for obj in obj_li:
print('username ---> ', obj.username)
print('password ---> ', obj.password)
return render(request, 'login.html', locals())
# return render(request, 'login.html', {'data2':data, 'msg2':msg})
# return HttpResponse('Welcome to my world')
urls.py
from django.conf.urls import url
from django.contrib import admin
from karlapp import views
urlpatterns = [
url(r'^login/$', views.login),
url(r'^admin/', admin.site.urls),
]
models.py
from django.db import models
class UserInfo(models.Model):
username = models.CharField(max_length=32, null=True)
password = models.CharField(max_length=32, null=True)
login.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>karlapp</title>
</head>
<body>
<h1>{{ a.0 }}</h1>
{% for item in obj_li %}
<div>
<span>{{ item.username }}</span>
<span>{{ item.password }}</span>
</div>
{% endfor %}
</body>
</html>
网友评论