杂货铺 | Django初始(补档)

文章目录

  • 安装django
  • 在pycharm创建项目
  • 创建app
  • 快速上手
    • 再写一个页面
    • templates模板
    • 静态文件
  • 模板语法
  • 请求和响应
  • 数据库操作

  • Python知识点:函数、面向对象。
  • 前端开发:HTML、CSS、JavaScript、jQuery、BootStrap。
  • MySQL数据库。
  • Python的Web框架:
    • Flask,自身短小精悍 + 第三方组件。
    • Django,内部已集成了很多组件 + 第三方组件。【主要】

安装django

pip install django

在pycharm创建项目

django中项目会有一些默认的文件和默认的文件夹

利用Pycharm + Django搭建一个简单Python Web项目

默认项目的文件介绍:

mysite
├── manage.py         【项目的管理,启动项目、创建app、数据管理】【不要动】【常用!】
├── templates         【通用的templates模板存放】
└── mysite
    ├── __init__.py
    ├── settings.py    【项目配置】          【常改!】
    ├── urls.py        【URL和函数的对应关系】【常改!】
    ├── asgi.py        【接收网络请求】【不要动】
    └── wsgi.py        【接收网络请求】【不要动】

杂货铺 | Django初始(补档)_第1张图片

创建app

  • Pycharm的Terminal命令——python manage.py startapp appName
  • 一个APP文件夹代表一个模块,可以包括:
    杂货铺 | Django初始(补档)_第2张图片

快速上手

  • ️确保app已注册 settings.py
    杂货铺 | Django初始(补档)_第3张图片

  • 编写URL和视图函数对应关系 urls.py
    杂货铺 | Django初始(补档)_第4张图片

  • 编写视图函数views.py
    杂货铺 | Django初始(补档)_第5张图片

  • 启动django项目

    • 命令行启动:python manage.py runserver
    • Pycharm启动
      杂货铺 | Django初始(补档)_第6张图片

再写一个页面

  • url -> 函数
  • 函数

templates模板

tip:

  1. 返回简单的字符串——return HttpResponse (“内容”)
  2. 返回一个网页——return render(request, “xxx.html”)
    • 搭配当前app文件夹之下创建的templates文件夹
    • 去找这个语句所提到的HTML文件
      • 优先在根目录里的templates里找(提前先配置,一般默认就会有,不配置即无效)
      • 然后再根据app的注册顺序,逐一去每个app的templates里去找。
        杂货铺 | Django初始(补档)_第7张图片

静态文件

  • 在开发过程中一般将:图片、CSS、js都当做静态文件处理。

  • static目录:在app目录下创建static文件夹。

  • 引用静态文件

    也可以不这么写,就直接写static/plugins/bootstrap-3. 4 .1/css/bootstrap.css,但这样的话,如果static文件名改了就全部要去手动改,但如果用如图的方式,就不需要一个个去手动改,还是会默认去那个静态文件夹里找。

模板语法

本质上:在HTML中写一些占位符,由数据对这些占位符进行替换和处理。

Django模板语法的一篇博客

Django模板语法的哔哩哔哩讲解,包含案例,推荐观看

模板语法本质——视图函数的render内部

  1. 读取含有模板语法的HTML文件
  2. 内部进行渲染(即模板语法执行并替换数据)最终得到只包含HTML标签的字符串
  3. 将渲染替换完成的字符串返还给用户浏览器

简单例子举例:
杂货铺 | Django初始(补档)_第8张图片
最后显示结果为:
杂货铺 | Django初始(补档)_第9张图片
字典同理,列表里套字典也同理,条件语句也同理,具体可去看一下哔哩哔哩讲解视频

请求和响应

也推荐看哔哩哔哩对应章节视频

常见是get,get可以理解为明面上给数据

  • 案例:用户登录

补充:csrf_token的作用

数据库操作

  • Django开发操作数据库更简单,内部提供了ORM框架,相当于一个翻译器。
    杂货铺 | Django初始(补档)_第10张图片
  • 安装第三方模块:pip install mysqlclient
  • ORM:ORM可以帮助我们做两件事:
    • 创建、修改、删除数据库中的表(不用你写SQL语句)。 【无法创建数据库】
    • 操作表中的数据(不用写SQL语句)。

  1. 自己创建数据库

  2. django连接数据库:在settings.py文件中进行配置和修改。

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'gx_day15',  # 数据库名字
            'USER': 'root', # 用户名
            'PASSWORD': 'root123', # 密码
            'HOST': '127.0.0.1',  # 那台机器安装了MySQL
            'PORT': 3306,
        }
    }
    
  3. django操作表

    • 创建表:在models.py文件中
      杂货铺 | Django初始(补档)_第11张图片

      • ①在models中输入以上语句,数据库中会自动执行以下代码:

        create table app01_userinfo(
            id bigint auto_increment primary key, 
            name varchar(32),
            password varchar(64),
            age int
        )
        
        • 最后生成的表名是该app文件夹的名_class后的类名
        • 尤其关注:每一个表在创建时都会默认添加一个既是自动递增又是主键的id字段
        • 而且打开数据库会发现很多额外的表,那是Django自带的
      • ②执行命令:

        python manage.py makemigrations
        python manage.py migrate
        
        • 理解python manage.py makemigrations 和 python manage.py migrate_
        • 注意:app需要提前注册。
    • 修改表

      • ①删除字段——直接在models.py里边删,然后再用上边两个命令更新一下
      • ②添加字段
        • 在models.py里边添加,然后再用上边两个命令更新一下。
        • 在表中新增列时,由于已存在列中可能已有数据,所以新增列必须要指定新增列对应的数据:手动输入一个值
        • 设置默认值:age = models.IntegerField(default=2)
        • 允许为空:data = models.IntegerField(null=True, blank=True)
  4. 表中的数据

    • 添加/新建数据
      #表名.objects.create()
      #这是程序员代码端的insert
      UserInfo.objects.create(name="武沛齐", password="123", age=19)
      UserInfo.objects.create(name="朱虎飞", password="666", age=29)
      #如果某个字段有默认值,例age字段有默认值2,那么就算不填,最后会给age一个2
      UserInfo.objects.create(name="吴阳军", password="666")
      
    • 删除数据
      #关注filter,就把id=3的对应数据删了
      UserInfo.objects.filter(id=3).delete()
      #这是把Department里的所有数据都删掉了
      Department.objects.all().delete()
      
    • 获取数据
      #获取全部数据
      data_list = UserInfo.objects.all()
      for obj in data_list:
           print(obj.id, obj.name, obj.password, obj.age)
      #获取某一条数据
      data_list = UserInfo.objects.filter(id=1)
      print(data_list)
      
    • 更新数据
      UserInfo.objects.all().update(password=999)
      UserInfo.objects.filter(id=2).update(age=999)
      UserInfo.objects.filter(name="朱虎飞").update(age=999)
      

你可能感兴趣的:(杂货铺,数据库系统概念,django,python,后端)