web前端基础知识-(六)Django基础

上面我们已经知道Python的WEB框架有Django、Tornado、Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了ORM、模型绑定、模板引擎、缓存、Session等诸多功能。今天就一起来学习下Django;

一、准备工作

1
2
3
1)打开cmd,进入到python安装路径下的Scripts;
2)使用pip安装:pip install Django
3)添加环境变量:python安装路径下的Scripts;

二、基本配置

1. 创建django程序

  • 终端命令:django-admin startproject sitename
  • IDE创建Django程序时,本质上都是自动执行上述命令

目录结构如下:

2. 配置文件

1)数据库:

1
2
3
4
5
6
7
8
9
10
DATABASES = {
    'default': {
    'ENGINE''django.db.backends.mysql',
    'NAME':'dbname',
    'USER''root',
    'PASSWORD''xxx',
    'HOST': '',
    'PORT': '',
    }
}

2)模板:

1
2
3
TEMPLATE_DIRS = (
        os.path.join(BASE_DIR,'templates'),
    )

3)静态文件:

1
2
3
STATICFILES_DIRS = (
        os.path.join(BASE_DIR,'static'),
    )

三、功能分类

1. 创建APP

1
2
3
4
5
6
7
8
9
10
11
12
# 切换到Django项目目录,执行命令
python manage.py startapp cmdb
  
# 目录结构
- cmdb
    - migrations  #数据库操作记录(只是修改表结构的记录)
    - init      #表示python数据包(python3中有无均可)
    - admin      #Django为我们提供的后台管理
    - apps      #配置当前app
    - models     #创建数据库表结构,写指定的类,通过命令可以创建数据库结构
    - tests      #单元测试
    - views      #写业务逻辑代码,最重要的就是这个文件了

2. 简单实例

1)登录实例

templates下生成html文件,如login.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        label{
            width: 80px;
            text-align: right;
            display: inline-block;
        }
    </style>
    <link rel="stylesheet" href="/static/commons.css"/>
</head>
<body>
    <form action="/login/" method="post">
        <p>
            <label for="username">用户名:</label>
            <input id="username" type="text" name="user"/>
        </p>
        <p>
            <label for="password">密码:</label>
            <input id="password" type="text" name="pwd"/>
            <input type="submit" value="提交" style="cursor:pointer"/>
            <span style="color: red;font-size:15px;">{{error_msg}}</span>
        </p>
    </form>
</body>
</html>

修改url文件,定义路由规则

1
2
3
4
5
6
7
8
from django.conf.urls import url
from django.contrib import admin
from cmdb import views
 
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^login', views.login),
]

定义视图函数:app下views.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
from django.shortcuts import render
 
# Create your views here.
from django.shortcuts import HttpResponse
from django.shortcuts import render
from django.shortcuts import redirect
import time
USER_LIST=[
    {'username':'alex','email':'lei10@qq.com','gender':'男'},
    {'username':'cc','email':'lei12@qq.com','gender':'男'},
    {'username':'tt','email':'lei13@qq.com','gender':'女'}
]
def home(request):
    if request.method=="POST":
        = request.POST.get("username");
        = request.POST.get("email");
        = request.POST.get("gender");
        temp = {'username':u,'email':e,"gender":g}
        USER_LIST.append(temp)
    return render(request,"home.html",{"user_list":USER_LIST})
def login(request):
    error_msg=""
    if request.method=="POST":
        user = request.POST.get('user',None);
        pwd = request.POST.get('pwd',None);
        if user=="root" and pwd=="111111":
            return redirect("/home/")
        elif user=="":
            error_msg="用户名不能为空!"
        elif pwd == "":
            error_msg = "密码不能为空!"
        else:
            error_msg="用户名或密码错误!";
    return render(request,"login.html",{'error_msg':error_msg})

浏览器访问http://127.0.0.1:8000/login显示login.html写的登录页面,可输入登录信息查看页面显示

 

通过上面的例子我们可以知道Django的生命周期:

-> URL对应关系(匹配) -> 视图函数 -> 返回用户字符串
-> URL对应关系(匹配) -> 视图函数 -> 打开一个HTML文件,读取内容

2)其他

1
2
3
4
5
request.GET.get('',None# 获取get请求发来的数据
request.POST.get('',None# 获取post请求发来的数据
return HttpResponse("字符串")
return render(request, "HTML模板的路径")
return redirect('/只能填URL')

3. 模板

上面实例中的login.html就是模板;对于模版,其实就是读取模版(其中嵌套着模版标签),然后将 Model 中获取的数据插入到模版中,最后将信息返回给用户。

模板中也有自己的语言,该语言可以实现数据展示

    • {{ item }}
    • {% for item in item_list %}  <a>{{ item }}</a>  {% endfor %}
    •   forloop.counter
    •   forloop.first
    •   forloop.last 
    • {% if ordered_warranty %}  {% else %} {% endif %}
    • 母板:{% block title %}{% endblock %}
    • 子板:{% extends "base.html" %}
    •    {% block title %}{% endblock %}
    • 帮助方法:
    • {{ item.event_start|date:"Y-m-d H:i:s"}}
    • {{ bio|truncatewords:"30" }}
    • {{ my_list|first|upper }}
    • {{ name|lower }}
posted @ 2016-12-23 16:11  wangsen123  阅读(193)  评论(0编辑  收藏  举报