2018-12-18

web框架

web框架: 别人已经设定好的一个web网站模板,你学习它的规则,然后“填空”或“修改”成你自己需要的样子。
一般web框架的架构是这样的:

2018-12-18_第1张图片
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是在每一个特定的循环中使用的变量名称
    {% for athlete in athlete_list %}
  • {{ athlete.name }}
  • {% endfor %}
# 给标签增加一个 reversed 使得该列表被反向迭代: {% for athlete in athlete_list reversed %} ... {% endfor %} # 可以嵌套使用 {% for %} 标签: {% for athlete in athlete_list %}

{{ athlete.name }}

    {% for sport in athlete.sports_played %}
  • {{ sport }}
  • {% endfor %}
{% endfor %}

3. ifequal/ifnotequal 标签

# {% ifequal %} 标签比较两个值,当他们相等时,显示在 {% ifequal %} 和 {% endifequal %} 之中所有的值
{% ifequal user currentuser %}
    

Welcome!

{% endifequal %} # 和 {% if %} 类似, {% ifequal %} 支持可选的 {% else%} 标签 {% ifequal section 'sitenews' %}

Site News

{% else %}

No News Here

{% 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基本命令

  1. 创建工程下project
    django-admin startproject project_name
  2. 在工程下创建应用app
    python manage.py startapp app_name
  3. 启动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 地址,告诉服务器去侦听任意的网络接口

  1. 同步更新数据库
    python manage.py makemigrations
    python manage.py migrate
  2. 清空数据库的表数据,只留表结构
    python manage.py flush
  3. 创建超级管理员
    python manage.py createsuperuser
  4. 修改用户密码
    python manage.py changepassword username
  5. 导出导入数据
    python manage.py dumpdata appname > appname.json
    python manage.py loaddata appname.json
  6. 项目环境终端
    python manage.py shell
  7. 数据库命令行
    python manage.py dbshell
  8. 更多命令
    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




    
    karlapp


    

{{ a.0 }}

{% for item in obj_li %}
{{ item.username }} {{ item.password }}
{% endfor %}

你可能感兴趣的:(2018-12-18)