Django学习 day57之Django第三日

【知识储备】静态文件配置的本质

细节知识

我们发送请求往一个地址获取静态文件时,实际上发生了多次请求:

  1. 发送请求,取到html页面文件
  2. 发送请求,取到css文件
  3. 发送请求,取到js文件
  4. 可能还有更多文件需要取到

创建步骤

  1. 先在根路径先创建目录(static)
  2. 在setting.py中配置
    STATIC_URL = '/static/' STATICFILES_DIRS=[ os.path.join(BASE_DIR,'static'), os.path.join(BASE_DIR,'abab'), // 如果配置了多个静态文件路径,将会遍历查找,找到了就停止查找 ]
  3. static文件夹中创建目录
    -js
    -css
    -img
    -其他第三方模块
  4. 模板文件中使用
    bootstrap与js的引入方法:
    1. bootstrap:<link rel="stylesheet" href="/static/bootstrap/css/bootstrap.min.css">
    2. js: <script src="/static/js/abab.js"></script>

一 登录功能,连接mysql

路由

    url(r'^login', views2.login),
    url(r'^index', views2.index),
    url(r'^test', views.test),

视图函数

  • 正儿八经的项目,数据库操作不应该放到view里,也不会用pymysql来手撸sql语句进行操作
def index(request):
    return render(request, 'index2.html')


def login(request):
    if request.method == 'GET':
        return render(request, 'login.html')
    else:
        name = request.POST.get('name')
        password = request.POST.get('password')
        # 创建一个数据库链接
        conn = pymysql.connect(host='127.0.0.1', user='root', password='123', database='userinfo', port=3306, )
        # 拿到一个游标
        cursor = conn.cursor()
        # 执行sql
        cursor.execute('select * from user where name=%s and password=%s ', (name, password))
        # 获取结果
        ret = cursor.fetchone()
        print(ret)
        if ret:
            return redirect('/index')
        else:
            return HttpResponse('用户名或密码错误')

模板文件login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css">
    <title>Title</title>
</head>
<body>

<div class="row">
    <div class="col-md-6 col-md-offset-3">
        <h1 class="text-center">登录功能</h1>
        <form action="" method="post">
            <div class="form-group">
                <label for="">用户名:</label>
                <input type="text" name="name" class="form-control">
            </div>


            <div class="form-group">
                <label for="">密码:</label>
                <input type="password" name="password" class="form-control">
            </div>

            <div class="text-center">

                <input type="submit" value="登录" class="btn btn-success">
            </div>

        </form>
    </div>

</div>

</body>
</html>

模板文件index2.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css">
    <script src="/static/js/jquery.min.js"></script>
    <title>首页</title>
</head>
<body>

    <nav class="navbar navbar-inverse navbar-fixed-top">
      <div class="container">
        <div class="navbar-header">
          <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
            <span class="sr-only">导航</span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
            <span class="icon-bar"></span>
          </button>
          <a class="navbar-brand" href="#">Project name</a>
        </div>
        <div id="navbar" class="navbar-collapse collapse">
          <form class="navbar-form navbar-right">
            <div class="form-group">
              <input type="text" placeholder="Email" class="form-control">
            </div>
            <div class="form-group">
              <input type="password" placeholder="Password" class="form-control">
            </div>
            <button type="submit" class="btn btn-success">Sign in</button>
          </form>
        </div><!--/.navbar-collapse -->
      </div>
    </nav>

    <!-- Main jumbotron for a primary marketing message or call to action -->
    <div class="jumbotron">
      <div class="container">
        <h1>阿巴阿巴</h1>
        <p>同城交友</p>
        <p><a class="btn btn-primary btn-lg" href="#" role="button">疯狂点击我</a></p>
      </div>
    </div>

    <div class="container">
      <!-- Example row of columns -->
      <div class="row">
        <div class="col-md-4">
          <h2>Heading</h2>
          <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
          <p><a class="btn btn-default" href="#" role="button">View details »</a></p>
        </div>
        <div class="col-md-4">
          <h2>Heading</h2>
          <p>Donec id elit non mi porta gravida at eget metus. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Etiam porta sem malesuada magna mollis euismod. Donec sed odio dui. </p>
          <p><a class="btn btn-default" href="#" role="button">View details »</a></p>
       </div>
        <div class="col-md-4">
          <h2>Heading</h2>
          <p>Donec sed odio dui. Cras justo odio, dapibus ac facilisis in, egestas eget quam. Vestibulum id ligula porta felis euismod semper. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.</p>
          <p><a class="btn btn-default" href="#" role="button">View details »</a></p>
        </div>
      </div>

      <hr>

      <footer>
        <p>© 2016 Company, Inc.</p>
      </footer>
    </div> <!-- /container -->

</body>
</html>

二 MTV与MVC

  1. django 是MTV架构,本质也是mvc

    • M:model,数据库相关操作
    • T:template,模板文件(就是mvc的v层)
    • V对应Django的url.py+view.py,视图(路由+V=MVC的控制器)
  2. MVC架构:主流的web框架都是mvc
    -Web应用分为模型(M),控制器©和视图(V)

    • M:model,数据库相关操作
    • C:controler控制器,逻辑相关,逻辑代码,类似view.py,区别在于用户进来直接执行,没有经过路由url
    • V视图(此view非彼view.py),指的是模板文件template,同MTV的T
  3. 上图
    MTV
    在这里插入图片描述
    MVC
    在这里插入图片描述

三 django请求生命周期

在这里插入图片描述

知识储备

  1. 近几年python中的几个web框架,sanic,fastapi(异步框架)

  2. python中的web服务器都符合wsgi协议

  3. web服务器,任何语言都会有一个web服务器,负责把http请求转成这门语言的变量

    1. python:wsgiref(性能很低),uwsgi(C语言写的),200多并发量
    2. java:tomcat,jboss(300多并发了)
    3. php:php服务器

四 虚拟环境讲解,pycharm配置

1 虚拟环境作用:隔离项目,每个项目有自己依赖的模块和包,不同模块和包的版本就不会相互影响
2 pycharm中配置虚拟环境
1. pycharm项目安装模块的界面–>右上角小齿轮–>add
2. 在这里插入图片描述

五 orm概述

orm是Django自带的对pymsql进行封装的功能,将操作化繁为简

  1. orm:对象关系映射(跟语言无关)
    数据库中的表 ----》对应程序的一个类
    数据库中的一行数据----》对应程序中的一个对象

  2. python中常见orm框架

    1. django的orm框架
    2. sqlachemy orm框架
  3. java:(扩展),java中写web项目
    ssh框架 :spring+struts(有漏洞)+hibernate(orm框架) (我的那个年代)
    ssm框架:spring+springmvc+mybatis(orm框架,可以写原生sql)
    springboot:sb框架 ,tomcat内置进去了
    springcloud:微服务

  4. orm能干的事
    -创建表(不能创建数据库,手动创建数据库)
    -增加删除表内字段
    -增删查改数据
    在这里插入图片描述

七 django中orm的使用

  1. sqlite:也是一个数据库,文件数据库,一个库就是一个文件,不需要单独安装
    -咱们现在在用,也要用到关系型数据库,不想装mysql,就可以使用sqlite
    -移动开发本地存储数据,存在sqlite中
    -Django默认就是sqlite

  2. 创建个UserInfo表,在models中写一个类

  3. 表中有字段(类属性),字段有属性,

# 第一步在models中写要给类
	class UserInfo(models.Model):
        # 字段属性--》后面那个对象决定的,
        # 改字段自增,并且是主键
        id = models.AutoField(primary_key=True)
        # 改字段是varchar类型,长度为32(唯一约束,是否是索引,默认值是,是否可以为空)
        name = models.CharField(max_length=32)
        # 密码字段
        password =models.CharField(max_length=64)
# 第二步,把表创建出来(执行两个命令)
	-python3 manage.py makemigrations  # 这条命令会在migrations创建一条记录,数据库变更记录
    -python3 manage.py migrate         # 把更改同步到数据库

两条数据库迁移命令(一个是记录,一个是真正的迁移)
python manage.py makemigrations
python manage.py migrate

通过orm存到数据库,生成对象,并保存
方式一:

obj=models.表对应的orm类(name=name,password=password,gender=gender,province=province) # 往里头传入要写入的参数
obj.save()  # 保存

方式二:

user=models.UserInfo.objects.create(name=name,password=password,gender=gender,province=province)  # 一步完成方式

查询所有
UserInfo.objects.all() # 放到列表中[user1,user2,user3]

猜你喜欢

转载自blog.csdn.net/wuzeipero/article/details/108874284
今日推荐