酱狗(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会自动创建第三张表
    # 多对多字段不会显示到表的字段中
    
posted @ 2019-06-07 00:31  EthanChen95  阅读(250)  评论(0编辑  收藏  举报