zoukankan      html  css  js  c++  java
  • Django框架学习 5.25

    5.25

    上周内容回顾

    纯手写web框架

    • socket代码需要自己写
    • http格式的数据要自己处理,只能拿到用户输入的路由

    基于wsgiref模块:web服务网关接口

    • 帮助你封装了socket代码
    • 帮你处理了http格式的数据,得到一个大字典(env)
    • 监听一个地址,请求来的时候帮你拆分http格式封装成方便处理的数据格式
    • 响应走的时候再帮你把数据打包成符合http格式的数据

    根据功能的不同,拆分成不同的py文件

    • urls.py:路由与视图函数对应关系
    • views.py:业务逻辑的视图函数,也可以是类
    • templates模板文件夹:存储html文件

    动静态网页

    • 根据html页面是写死的还是从后端动态获取的区分

    • 如何将后端的数据传递给html

      • jinja2模板语法

        {{user_list}}
        {%for i in user_list%}
        

        jinja2的模板语法比较贴近python语法,有时候比python更加简单

    python三大主流web框架

    • django:大而全,有时候过于笨重
    • flask:小而精,第三方组件很多
    • tornado:异步非阻塞

    注意事项

    • 计算机名称不能有中文
    • 一个pycharm窗口不要打开多个项目,不要出现文件夹套文件夹
    • 文件名也不要出现中文
    • python解释器版本建议3.6,django建议1.11版本

    django必会命令

    1. 创建django项目
    先切换到一个盘中 D:
    django-admin startproject mysite
    
    2. 启动django项目
    python3 manage.py  runserver 127.0.0.1:8080
    
    3. 创建应用
    python3 manage.py startapp app01
    
    一个django项目就是一个空壳,本身没有任何内容,应用类似于一个个的功能模块
    

    创建应用之后一定要去配置文件settings中注册才会生效

    INSTALLED_APP = {
    	'app01'
    	'appo1.apps.App01Config'
    }
    

    命令行创建应用,不会自动创建templates文件夹,也不会自动配置路径

    DIR:[os.path.join(BASE_DIR,'templates')]
    
    pycharm会自动创建并自动配置路径,会自动主次一个应用
    

    django主要文件介绍

    mysite
      - mysite
        - urls.py
        - settings.py
        ...
      - manage.py
      - app01.py
      - tests.py
      - modles.py
      - views.py
    

    django小白3必会

    form django.shortcuts import HttpResponse,render,redirect
    
    return HttpResponse('字符串')
    return render(request,'login.html')
    return redirect(url)
    

    html获取视图函数发来的值

    # 视图函数中
    return render(request,'index.html',data)
    # 指名道姓传data
    
    return render(request,'index.html',locals())
    # 传回局部名称空间中所有的数据
    

    今日内容

    以登陆功能为例

    • 静态文件配置
    • request对象方法初始
    • pycharm连接数据库MySql
    • django连接数据库
    • django ORM简介
    • 利用ORM实现数据的增删改查操作

    先大致掌握django的功能,后面再详解

    静态文件配置

    登陆功能

    1. 创建应用

    2. 注册url

    3. 在视图函数里添加login函数

    4. 创建login的html文件,放在templates文件夹下

      将网站使用的静态文件默认放在static文件夹下

      静态文件:前端写好的,直接调用展示的都是静态文件,如css,js文件,需要用到的图片文件以及框架
      
      django不会给你船舰static文件夹,需要自动创建
      static文件夹下再创建几个文件夹:js,css,img,bootstrap
      
      在浏览器中输入url能够看到对应的资源,是因为后端提前开了该资源的接口,所以对静态文件,应该提前开放访问的接口
      

    静态文件配置方法

    settings-->STATIC_URL

    STATIC_URL = '/static/' # 类似访问的令牌,一旦发现连接是以static开头,就允许连接到static列表里面找文件
    # link href="/static/css/..."
    # 令牌可以换别的
    STATICFILES_DIRS = [
    	os.path.join(BASE_DIR,'static')
    ]
    # 再在网页中引用静态文件,使用/static/开头
    

    当你在写django项目的时候,可能会出现后端代码修改了但是前端页面没有变化的情况

    1. 在同一个端口开了好几个django项目,在跑的其实是第一个django项目
    2. 浏览器缓存问题,setting,network,disable cache勾选上

    动态解析static令牌

    {% load static}
    <link href="{% static 'bootstrap-3.3.7......'}">
    

    登陆页面

    1. 先写一个form表单,input用户名,password,class=form-control
    2. input,type=submit
    3. form表单默认是get,改method为post,改action为login后缀
    4. 前期提交的时候遇到403,就去注释掉中间键MIDDLEWARE

    判断当前请求方式

    request.method # 得到请求方式
    # GET或POST,可以在视图函数中进行判断,人为的区分
    if request.method =='GET':
    	return 'GET'
    # 获取用户提交的数据,一个字典
    print(request.POST)
    username = request.POST.get('username')
    # 拿到username列表的最后一个元素:字符串格式
    request.POST.getlist('username')
    # 获取整个列表,list类型
    return 'POST'
    

    request对象方法初始

    request.method
    # 获取当前请求的类型,得到字符串GET或POST
    request.POST
    # 获取用户提交的post请求数据,得到一个字典
    request.GET
    # 获取用户提交的GET请求数据,得到一个字典
    request.POST.get('username')
    # 拿到username列表的最后一个元素:字符串格式
    request.POST.getlist('username')
    # 获取整个列表,list类型
    request.GET.getlist('username')
    # 获取整个列表,list类型,用法跟post一模一样
    

    get获取的数据大小有限制,post没有限制

    pycharm连接数据库

    右侧,database,+,data source,mysql

    一定要先安装对应的驱动:download missing driver

    在当前项目文件夹下先创建一个库,再连接

    django连接MySQL

    settings中自带一个小数据库sqllite3

    # settings.py
    DATABASE = {
    	'deafult':{
    		'ENGINE':'django.db.backends.mysql',
    		'NAME':'db1' # 库名
    		'USER': 'root',
    		'PASSWORD':'6008',
    		'HOST': '127.0.0.1',
    		'PORT': '3306',
    		'CHARSET':'utf8'
    	}
    }
    # 完成配置settings之后,django默认用mysqldb模块连接,但是该模块兼容性不好,需要手动改为pymysql连接
    # 需要告诉django不要用默认的MySQLdb,而是用pymysql
    
    # 在项目名下的init内打个补丁
    import pymysql
    pymysql.install_as_MySQLdb()
    

    Django ORM

    orm:对象关系映射,能够让一个不懂sql语句的人也可以通过python面向对象的代码简单快捷的操作数据库

    不足:封装程度太高,有时候效率低

    models.py

    先在models.py中写一个类

    from django.db import models
    class User(models.Model):
        # id int primary_key auto_increment
    	id = models.AutoField(primary_key=True)
        # username varchar(32)
    	username = models.CharField(max_length = 32)
        # password int
    	password = models.IntegerField()
    	# 相当于创建了三个字段
    	
    class Author(models.Model):
    	# 由于一张表中必须要偶一个主键,并且一般情况都叫id,所以orm当你不定义主键字段的时候,orm会自动创建一个名为id的主字段
    	username = models.CharField(max_length = 32)
        # charfield必须指定max_length参数,不指定会报错
        # 还可以指定verbose_name,对字段进行注释
    	password = models.IntegerField()
    

    数据库迁移命令

    只要修改了数据库,就要执行以下代码

    python3 manage.py makemigrations
    将操作记录到migration文件夹
    
    python3 manage.py migrate
    将操作真正同部到数据库中
    

    利用orm实现字段增删改查

    # 字段的增加,三种方法
    1.可以在终端内直接给出默认值
    2.该字段可以为空
        info = models.CharField(max_length=32,verbose_name='个人简介',null=True)
    3.直接给字段设置默认值
        hobby = models.CharField(max_length=32,verbose_name='兴趣爱好',default='study')
    
    # 字段修改
    修改代码,再执行数据库迁移的两条命令即可
    
    # 字段删除
    把对应的字段注释,再执行两条命令
    不要轻易删除操作
    

    数据的增删该查

    查询:filter

    获取用户名的密码,利用orm操作数据,校验数据是否正确

    from app01 import models
    res = models.User.objects.filter(username=username)
    print(res) # 一个列表,套着数据对象
    # 类似于selec * from user where username = username
    # filter括号内可以携带多个参数,参数与参数之间默认是and关系
    user_obj = res[0] # 拿到user对象
    # 也可以使用res.first() 拿到第一个
    user_obj.username
    user_obj.password # 拿到数据
    
    # 进行逻辑判断
    
    

    增加

    # 第一种
    from app01 import models
    res = models.User.objects.create(username=username,password=password)
    
    # 第二种,利用对象.属性,对象.save()
    user_obj = models.User(username=username,password=password)
    user_obj.save()  # 保存数据
    
  • 相关阅读:
    OKR实施方法——关于思路和流程的思考
    如何制作一份疫情场所分布地图?(附数据和源码)
    经纬度编码方法推荐-plus code简介
    快递到车服务的实现思路和问题思考
    ACC自适应巡航控制系统介绍
    《无人驾驶》-了解无人驾驶最佳读物
    手把手教你制作微信小程序,开源、免费、快速搞定
    2点GPS坐标求方位角
    GPRS 应用详解_GPRSsim800c(转)
    STM32的ADC采样与多通道ADC采样(转)
  • 原文地址:https://www.cnblogs.com/telecasterfanclub/p/12957782.html
Copyright © 2011-2022 走看看