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()  # 保存数据
    
  • 相关阅读:
    401. Binary Watch
    46. Permutations
    61. Rotate List
    142. Linked List Cycle II
    86. Partition List
    234. Palindrome Linked List
    19. Remove Nth Node From End of List
    141. Linked List Cycle
    524. Longest Word in Dictionary through Deleting
    android ListView详解
  • 原文地址:https://www.cnblogs.com/telecasterfanclub/p/12957782.html
Copyright © 2011-2022 走看看