django简介

MVC与MTV

MVC

Web服务器开发领域里著名的MVC模式,所谓MVC就是把Web应用分为模型(M),控制器(C)和视图(V)三层,他们之间以一种插件式的、松耦合的方式连接在一起,模型负责业务对象与数据库的映射(ORM),视图负责与用户的交互(页面),控制器接受用户的输入调用模型和视图完成用户的请求

web框架应用最广泛就是PHP了,它只能做web开发,而且开发效率很快。

MTV

Django的MTV模式本质上和MVC是一样的,也是为了各组件间保持松耦合关系,只是定义上有些许不同,Django的MTV分别是值:

M 代表模型(Model): 负责业务对象和数据库的关系映射(ORM)。
T 代表模板 (Template):负责如何把页面展示给用户(html)。
V 代表视图(View): 负责业务逻辑,并在适当时候调用Model和Template。
除了以上三层之外,还需要一个URL分发器,它的作用是将一个个URL的页面请求分发给不同的View处理,View再调用相应的Model和Template,
MTV的响应模式如下所示:

 django的安装

pip3 install django==1.11.9  ,目前学习1.11版本的,根据维护时间,这个版本的最长

在cmd的命令行中新建一个project

 django-admin startproject 名称

主要目录介绍

manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库等。
settings.py ---- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。
urls.py ----- 负责把URL模式映射到应用程序。

manage.py : 它不仅是启动文件,它还是与Django交互的文件。比如:

python manage.py  runserver   : 运行项目
python manage.py  startapp    : 创建应用

 如果运行项目时,不指定端口,默认监听本机的8000端口。、

在项目里面创建应用

python manage.py startapp app01   #下面是它生成的几个目录和文件
├── blog
│   ├── admin.py
│   ├── apps.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py

django项目的启动

python manage.py runserver 8080

 下面要对setting文件做一些配置

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',  #注释掉这行,要不然访问的时候报错
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]
下面是要加入的代码:表示静态文件的路径,可以有多个
STATICFILES_DIRS=[ os.path.join(BASE_DIR,'static'), os.path.join(BASE_DIR,'static99'), ]

设置urls.py文件,这里面可以放入根据用户路径访问不同的页面

from app01 import views

urlpatterns = [
    # url(r'^admin/', admin.site.urls),
    url(r'^home/',views.home),   #指向app01应用的views.py文件里面的home函数
    url(r'^index/',views.index),
    url(r'^login/',views.login),
    url(r'^book_list/',views.book_list),
]

app01应用下面的views.py的配置

from django.shortcuts import HttpResponse,render,redirect
from app01 import models

def index(request):
    # return HttpResponse('index')  #三件套之一:HttpResponse,返回用户的的字符串
    return redirect("http://www.luffycity.com")  #  三件套之二:redirect ,重定向到其他网站或者跳转到其他地方
def home(request):

    return render(request,"home.html")    #三件套之三:返回一个html文件,并且后面可以传参数,比如变量的字典格式

def login(request):
    #如果是post请求,表示页面上面给我提交数据了
    #我要取值
    error_msg=""
    if request.method=="POST":
        email=request.POST.get("email2")
        pwd= request.POST.get("pwd")
        print(email,pwd)
        if email=="xinxin@163.com" and pwd=="123456":
            return redirect("http://www.baidu.com")
        else:
            error_msg="邮箱或密码错误!"
            # return render(request,"login.html",{"error":error_msg})  #将变量error传递给login.html页面,让他可以处理数据

    return render(request,"login.html",{"error":error_msg})


def book_list(request):
    #找到所有的书
    books=models.Book.objects.all()
    return render(request,"book_list.html",{"book_list":books})

 下面我们来写一个登陆页面传递变量,并判断用户名和密码的正确与否

login.html

<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
    <title>登录注册示例</title>
    <style>
        body {
            background-color: #eee;
        }
    </style>
</head>
<body>

<div class="container">
    <div class="row">
        <div class="col-md-4 col-md-offset-4" style="margin-top: 100px">
            <h1 class="text-center">请登录</h1>
            <form class="form-horizontal" action="/login/" method="post" novalidate>
                <div class="form-group">
                    <label for="inputEmail3" class="col-sm-2 control-label">邮箱</label>
                    <div class="col-sm-8">
                        <input type="email"  name="email2" class="form-control" id="inputEmail3" placeholder="Email">
                    </div>

                </div>
                <div class="form-group">
                    <label for="inputPassword3" class="col-sm-2 control-label">密码</label>
                    <div class="col-sm-8">
                        <input type="password" name="pwd" class="form-control" id="inputPassword3" placeholder="Password">
                    </div>
                </div>
                <p style="color: red">{{ error }}</p>  #这里面就是error变量,使用 {{}}
                <div class="form-group">
                    <div class="col-sm-offset-2 col-sm-10">
                        <div class="checkbox">
                            <label>
                                <input type="checkbox">记住我
                            </label>
                        </div>
                    </div>
                </div>
                <div class="form-group">
                    <div class="col-sm-offset-2 col-sm-8">
                        <input type="submit" class="btn btn-primary btn-block" value="登录">
                    </div>
                </div>
            </form>
        </div>
    </div>

</div>
<script src="/static/jquery-3.3.1.min.js"></script>
</body>
</html>

样式结果如下,这里面替换替换掉了error变量

原文地址:https://www.cnblogs.com/mmyy-blog/p/9695385.html