二、Django的安装和简单的运行

一、MVC和MTV框架

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

  • MTV
    Django的模式就是MTV

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

二、django的下载安装

官网地址:https://www.djangoproject.com/download/

目前版本是用的1.11版本的,等2020年再去学习2.2版本的

  1. cmd终端创建启动Django项目

  2. 下载Django:
    pip3 install django==1.11.9

  3. 创建一个django project
    django-admin startproject mysite 创建了一个名为"mysite"的Django 项目:

    因为执行的pip.exe,所以Django会安装在pip所在的文件下;

    当发现scripts文件夹中有Django,就安装成功,就不用再去配置环境;

    安装完成后,去创建一个django project,若出现以下情况,说明环境变量没有配置好,要把你安装的Django的路径配置在环境变量中

  4. 创建的项目文件介绍
    创建成功后,目录会生成mysite的工程,目录如下:

    • manage.py ----- Django项目里面的工具,通过它可以调用django shell和数据库,启动关闭项目与项目交互等,不管你将框架分了几个文件,必然有一个启动文件,其实他们本身就是一个文件。
    • settings.py ---- 包含了项目的默认设置,包括数据库信息,调试标志以及其他一些工作的变量。
    • urls.py ----- 负责把URL模式映射到应用程序。
    • wsgi.py ---- runserver命令就使用wsgiref模块做简单的web server,后面会看到renserver命令,所有与socket相关的内容都在这个文件里面了,目前不需要关注它。
  5. 运行项目
    python manage.py runserver 127.0.0.1:8080
    #此时已经可以启动django项目了,只不过什么逻辑也没有呢
    通过指令运行项目的时候,可以不写ip地址、端口
    如果不写,默认是127.0.0.1
    python manage.py runserver 8080
    如果连端口都不写,默认是8000端口
    python manage.py runserver

    停止项目:ctrl+c
    

    当出现以上效果,说明项目已经启动成功了,就可以通过网页输入127.0.0.1:8080来访问了,效果如下:

  6. 在mysite下创建应用
    会发现,上面没有view视图函数的文件等等,这些文件可以理解为应用,一个项目可以有多个应用,比如微信,就有支付应用、聊天应用、小程序、朋友圈等等...每个应用都应该有自己的逻辑内容,需要自己去单独创建应用
    python manage.py startapp app01
    #通过执行manage.py文件来创建应用,注意:应该在这个manage.py的文件所在目录下执行这句话,因为其他目录里面没有这个文件
    cmd执行命令后,除了之前有的manage.py和mysite文件夹,又新生成了一个新的文件夹app01,文件夹内容如下:

  7. pycharm创建启动Django项目

创建Django的项目,很少用命令行了,用 pycharm就能创建

  1. 在 File 下选 New Project

  2. 配置Django选项

  3. 创建,在新窗口打开

  4. 生成的文件目录如下:

    其中的templates是pycharm帮助我们直接创建好的,放一些模板,也就是html文件。

  5. 运行项目:

    点击运行后,出现以下情况,就是启动项目成功了

    此时,在网页输入127.0.0.1:8000,就可以访问了

    这是因为我们还没有写任何的逻辑,然后,我们做一个简单的登录功能

  6. 基于Django实现一个简单的示例

我们做一个登录的页面的web项目,浏览器输入一个网址就能得到这个登录的web页面

  1. 先找urls.py
    from django.conf.urls import url
    from django.contrib import admin
    from app01 import views # 引入视图的函数的文件

    urlpatterns = [
        # url(r'^admin/', admin.site.urls),
        url(r'^index/', views.index),  # 模仿写出路由的配置
        # 配置路径,r'^/index/',这个前置导航斜杠不需要添加.
        # 正则,可以让路径不用写死,index/dsad/qweq/fdsf/...也能匹配到
    ]
    
  2. 再写视图函数 views
    from django.shortcuts import render

    # Create your views here.
    
    def index(request):# request是一个形参,接受所有请求的内容
        return render(request,'login.html')
    

    render后面可以直接写html文件的原因:
    之所以可以直接写 login.html,是因为settings.py的配置文件中已经配置好了路径,可以直接拿到

    • 在settings.py的配置文件中有
      • TEMPLATES 中有一项 'DIRS': [os.path.join(BASE_DIR, 'templates')]
      • BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(file)))
    • abspath(file)是settings本文件
    • os.path.dirname(os.path.abspath(file))是settings的父目录文件夹 third_pro
    • os.path.dirname(os.path.dirname(os.path.abspath(file))) 是整个这个项目的文件夹 third_pro
    • 所以 BASE_DIR 就是这个项目的文件夹,也就是最外层的那个文件夹 third_pro
    • 'DIRS': [os.path.join(BASE_DIR, 'templates')] 是路径的拼接,就可以直接找到templates里面的html文件了
  3. 写模板 templates,在这里创建html文件

    <h1>欢迎来到登录页面</h1>
    
    <form action="">
        用户名:<input type="text" name="username">
        密  码:<input type="text" name="password">
        <input type="submit">
    </form>
    

    注意:name属性必须要有,因为通过表单提价数据的时候,可以把用户输入的值带过去

  4. 这样就简单完成了一个web项目
    通过输入127.0.0.1:8000/index,就能拿到我们写好的页面

  5. 完善Django实现的登录功能

用户输入用户名密码,在后台判断输入的用户名密码是否正确

首先 区分一下 get请求 和post请求

  • form表单默认get请求
    用户提交的数据还是返回给 index 那个路径
    request.GET -- GET请求发送来的所有数据,queryDict类型

    <input name='username'>
    	request.GET.get('username')
        # 获取 name='username' 的 input 标签用户输入的内容
    
  • post请求
    request.POST -- POST请求发送来的所有数据,queryDict类型

    <input name='username'>
    	request.POST.get('username')
        # 获取 name='username' 的 input 标签用户输入的内容
    

因为要获取用户提交的数据,表单提交有两种方法:

  1. get请求数据:

    from django.shortcuts import render,HttpResponse

    def index(request):
    print(request.GET) #<QueryDict: {'username': ['dazhuang'], 'password': ['123']}>
    username = request.GET.get('username')
    password = request.GET.get('password')
    print(username,password)
    if username == 'dazhuang' and password == '123':
    return HttpResponse('登录成功!') --- 回复字符串数据
    else:
    return HttpResponse('失败!')
    return render(request, 'login.html')

出现问题:当直接通过路径请求页面,是get请求,form表单提交数据也是get请求,会分不清,所以请求页面用get请求,form表单提交数据用post请求

  1. post请求数据:

views视图函数文件写:

def index(request):
    print(request.method) #'POST' 'GET'
    if request.method == 'GET':
        return render(request,'login.html')

    else:
        # print(request.GET)
        print(request.POST)
        username = request.POST.get('username')
        password = request.POST.get('password')
        if username == 'dazhuang' and password == '123':
            return HttpResponse('登录成功!')
        else:
            return HttpResponse('登录失败!')

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">
    <title>Bootstrap 101 Template</title>

</head>
<body>
<h1>欢迎来到登录页面</h1>

<form action="/index/" method="post">  # 给一个method属性规定post请求
    用户名:<input type="text" name="username">
    密  码:<input type="text" name="password">
    <input type="submit">
</form>

</body>
</html

settings文件:

post请求提交数据时关掉一个认证机制,settings配置文件中

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',
]

最终效果:

输入正确的用户名、密码:dazhuang、123,提交,

显示登录成功,否显示登录失败

一些注意的点:

  • urls.py里面需要注意的问题
    url(r'^index/', views.index), 第一个参数:路径正则字符串 第二个参数:对应的视图函数
  • views.py
    def login(request):
    获取请求方法:request.method--'GET','POST'
    request.GET -- GET请求发送来的所有数据,queryDict类型
    request.POST -- POST请求发送来的所有数据,queryDict类型

    request.POST.get('username')
    request.GET.get('username')
    return HttpResponse('字符串') --- 回复字符串数据
    retuen render(request,'login.html')

三、简单总结

  1. django下载安装

    下载:pip install django==1.11.9

    创建项目
    django-admin startproject qingqing
    cd qingqing
    启动项目:python manage.py runserver 127.0.0.1:8001
    cd qingqing
    创建app:python manage.py startapp xiaoqing

    需要在项目的配置文件settings.py中添加一个app的配置
    INSTALL_APPS = [
    'xiaoqing', app名称
    ]

    INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    # 以下两种写法都可以
    'app01.apps.App01Config',
    #'app01',
    ]

  2. 两个框架模式

    MVC
    M:models数据库相关
    V:views 视图逻辑相关
    C:controller控制器 url分发 不同的路径找到不同的视图函数
    MTV
    M:models数据库相关
    T:templates模板 ,HTML文件
    V:views 视图逻辑相关
    + url控制器 不同的路径找到不同的视图函数
    MVVM

原文地址:https://www.cnblogs.com/yangzm/p/11209808.html