• 酱狗(Django)的初级应用


    昨日回顾

    根据用户访问的不同路径返回不同的页面

    ​ 手动对http请求格式的数据进行一系列处理获取到用户访问的路径后逻辑判断

    借助于wsgiref模块帮助我们处理socket以及http数据

    动态获取数据

    ​ 后端利用字符串的替换 替换html中特殊符号的部分

    基于 jinjia2 完成模板渲染

    ​ {{ 后端传来的变量名 }} 接收数据

    jinjia2 模块提供了和 python 后端几乎一样的操作数据的方式

    {{ }} 与变量相关

    {% %} 与逻辑相关

    python三大主流框架 Django Flask tornado

    今日内容

    1. 路由访问如果不加斜杠,会重定向访问加斜杠的路由
    2. 所有的html文件都是templates文件夹下
    3. 所有的静态文件(除html文件,如cssjs等文件) 默认都放在 static 文件夹下
      STATIC_URL = '/static/'		# 访问接口前缀 跟静态文件夹的名字无关 一般情况下与静态文件夹相同
      # 静态文件配置
      STATICFILES_DIRS = [
          os.path.join(BASE_DIR, 'static'),	# 静态文件夹匹配路径
          ...		# 可匹配多个路径,按顺序匹配,一旦成功就停止
      ]
      

      暴露给外界能够访问服务器静态文件夹下面所有的资源

    4. form表单提交数据方式

      全路径

      <form action="127.0.0.1..."></form>
      

      只写后缀

      <form action="login/"></form>
      

      POST | GET 请求方式

      <form action="login/" method="POST"></form>		# GET
      
    5. 后端获取请求方式

      request.method 获取请求方式 POST | GET (默认获得全大写字符串)

      # 推荐写法
      if request.methon == "POST":
          return HTTPresponse("ok")
      return render(request,"login.html")
      
    6. 后端获取数据方式

      request.POST & request.GET #获取数据方式方式相同

      request.POST # 客户端发送的数据,以数组套字典形式发送

      request.POST.get(‘key’) # 默认获得 value列表中的最后一个值

      request.POST.getlist(‘key’) # 获得 value 列表中的所有值 场景:用户可多选数据

      request.POST.[‘KEY’] # 不推荐使用

    7. 注释校验

      1559788299874

    8. 后端访问数据库

      通过 pymysql 模块

      import pymysql
      conn = pymysql.connect(
      	host="127.0.0.1",
          port=3306,
          user='root',
          ...
      )
      

      通过pycharm自带 mysql 驱动连接数据库

      1559791006645

      通过 Django 配置 mysql 数据库

      DATABASES = {
          'defalut' : {
              'ENGINE':'django.db.backends.mysql',
              'NAME':'DATABASE_NAME',
              'HOST':'127.0.0.1',
              'PORT':3306,
              'USER':'USERNAME',
              'PASSWORD':'PASSWORD'
          }
      }
      

      Project 下的init.py 中修改

      import pymysql
      pymysql.install_as_MySQL()  # 告诉django用 
      

      ORM 对象关系映射

      models.py 中 建立 表类

      class User(models.Model):
          id = models.AutoField(primary_key=True)	# 建立主键
          name = models.CharField(max_length=32)	# name 字段是 varchar(32) 
          										# CharField在定义时必须加上max_length参数
          password = models.CharField(max_length=32)
      

      djangoORM 不能自动帮你创建库,但是能自动创建表

      一个 Django Project只使用一个库!!不要多个Django Project 使用同一个库

      数据库迁移(同步)命令

      操作 migration 中的 init.py

      python3 manage.py makemigrations # 将数据库变动记录到一个文件中

      ​ # 并不会在数据库中创建表,只是一次记录

      python3 manege.py migrate

      1559792280046

      增删改查指令

      ######增#####
      # 方式一
      user_obj = models.User.objects.create(name=username,password=password)	# 增加数据
      # 方式二
      user_obj = models.User(name=username, password=password)
      user_obj.save()	# 增加数据
      
      ######查#####
      user_list = models.User.objects.all() # 查询全部数据 无数据为空列表
      rs = models.User.objects.filter(id = delete_id) # 条件查询获取对象列表 无数据1为None
      obj = models.User.objects.get(id = edit_id) # 直接获取到数据对象(不推荐,无数据则报错)
      
      ######删#####
      rs = models.User.objects.filter(id = delete_id).delete() # 删除queryset中全部对象
      
      ######改#####
      models.User.objects.filter(id = edit_id).update(name=username,password= password)
      
      obj = models.User.objecys.filter(id = edit_id).first()
      obj.name = username
      obj.save()
      
      ##### 
      
      user_obj	# 操作的表对象
      user_obj.pk	# .pk 获得该条记录的主键值
      user_list.query # 查看执行的sql语句 必须是 queryset 对象
      
      
    9. <a> 标签实现增加删除数据

      <a href="/register/">增加</a>
      <a heaf="/delete/?delete_id={{ user_obj.pk }}"></a>  <!--将 id 作为 GET 请求参数发送-->
      
    10. 向后端发送 id 的方法

      <input type="hidden" name = "edit_id" value= {{ edit_id }}>	 <!--隐藏标签-->
      
    11. 一对多外键字段的建立

      publish = models.ForeignKey(to="Publish") # 外键字段名 ORM 会自动在字段名后面加_id
      

      多对多外键字段的建立

      author = models.ManytoManyField(to="Author") # Django会自动创建第三张表
      # 多对多字段不会显示到表的字段中
      
  • 相关阅读:
    Fruit Ninja(随机数rand())
    C. A Mist of Florescence ----- Codeforces Round #487 (Div. 2)
    给力的移动 FZU
    FZU 2254 英语考试 (最小生成树)
    6486: An Ordinary Game(规律)
    HDU 1114: Piggy-Bank
    HDU 5916: Harmonic Value Description
    1072 威佐夫游戏
    1069 Nim游戏
    1066 Bash游戏
  • 原文地址:https://www.cnblogs.com/Ethan99/p/10987405.html
Copyright © 2020-2023  润新知