Django入门

Django入门
一、

1、互联网两台机器之间通行:ip、端口、协议
    - 协议
        - HTTP  (80- HTTPS  (443) 

2、浏览器输入URL一回车返回页面发生了什么?
    - 域名 -> DNS解析 -->ip地址 -> 找到服务端 ->服务端返回消息 -> 浏览器
    - 浏览器 <-> 服务器
    - 服务器把 写好的HTML页面,返回给浏览器,浏览器按照HTML格式渲染
    「

    」

3、请求和相应
    - HTTP协议的特点:
        - 浏览器给服务端发消息的过程叫请求(request)
        - 服务器给浏览器回复消息的过程叫响应(response)
        
    - 请求和相应的消息都必须遵循一个固定的格式

4、python中Web框架分类
    - a、收发socket消息,按照HTTP协议解析消息   Web服务程序 wsgiref、gunicorn、uWSGI
    - b、字符串替换,用来实现动态网页                                
    - c、业务逻辑处理                            Web应用程序

    1- 自己实现abc的
        - Tronado  
    2- 自己实现bc使用别人的a
        - Django
    3- 自己实现c使用别人的ab
        - Flask
5、Web服务程序  <-  WSGI协议  -> Web应用程序


5.5、Django版本
    - LTS版本 (Long Team support)

6、创建第一个Django项目
    
    安装:  pip install django==1.11.11
            pip install django==1.11.11 -i 指定源 

    - 1、命令行  Django-admin startproject first_Django
    - 2、Pycharm创建
        - file -> new Project ->右侧选Django -> 选好路径 ->选好环境 -> 名字app -> 在新的窗口打开文件
    - 3、启动项目
        - 命令行启动(切换到项目的根目录)
            - python manage.py runserver 127.0.0.1:8090(改端口这样指定)
        - pycharm启动
            - 框中选项为项目名->让后点击启动按钮(右上角)(如果想改就在旁边点编辑-就可以改端口等)

    - 目录介绍
        - 和项目名一样的是根目录
        - 
    ---------------------
    - 先来一份自己的理解
        - 1、(与我们所创建文件名一致的目录)根目录
            - manage.py 
                - 这是启动文件,程序入口。
            - settings.py
                - 包含了项目的一些设置,包括数据库信息、调试标志以及其他的一些工作的变量。
                - BASE_DIR = 项目的根目录
                - TIMELATES = templates去哪找
                - DATABASES = 数据库
                - 静态文件配置
                    - STATIC_URL = '/static/' # 请别名
                    - STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static'),] # 配置去static下找静态文件
            - urls.py
                - 路径与视图函数的映射关系


        - 2、templates - 这个文件夹存放的是HTML文件
        - 3、static - 这个文件夹是存放静态文件,需要自己配置,用的时候的导入时用 
             /static/.. 来引入所用的静态文件
                 # Static files (CSS, JavaScript, Images)
                # https://docs.djangoproject.com/en/1.11/howto/static-files/

                # 这个static就代表了下面的路径 (寻找的时候就是去static下面的路径中挨个找)
                STATIC_URL = '/static/'  # 起别名, HTML中找静态文件都要以这个别名开始  (找到别名后就去这个别名的配置比文件中找对应的文件)

                # 这个常量是固定格式
                STATICFILES_DIRS = [
                    os.path.join(BASE_DIR, 'static'),
                ]
    
7、项目流程
    - 先输入url
    - 去Django的urls中匹配urlpatterns->匹配上调用后面匹配的函数->去找对应的函数
    - 找到执行的函数->Django调用要执行的函数给函数传一个request参数,所有和请求相关的数据 都在request中
    - render去templates文件夹找到HTML文件,打开读取内容,按照http响应格式给浏览器返回读取的内容
    - 浏览器收到Django返回的响应消息,按照HTML格式显示这个消息



其他:
    - from django.shortcuts import HttpResponse, render
        - HttpResponse (封装了协议头等-有待商议)
        - render (渲染)

    - 文件的上传(form表单的提交, 必须用POST)
        def index(request):
            print(request.GET)
            print(request.POST)
            print(request.FILES)

            for item in request.FILES:
                fileobj = request.FILES.get(item)
                f = open('upload/%s' % fileobj.name, 'wb')
                item_file = fileobj.chunks()
                for line in item_file:
                    f.write(line)
                f.close()

            return HttpResponse("成功")
     - form表单上传文件时需要注意的事情
         - action 最后加 /  或者 修改settings:APPEND_SLASH=False
         - method 必须为post 
         - enctype = “multipart/form-data” 必须写

     - 指定IP登录
         默认IP和端口
            python manage.py runserver
        指定端口:
            python manage.py runserver 192.168.12.12:8080
        此时会报错,我们需要修改配置文件:
        修改settings.py,将192.168.12.12添加到ALLOWED_HOSTS中
        ALLOWED_HOSTS=['172.31.169.182','127.0.0.1','192.168.1.50','192.168.1.115']
        也可以将ALLOWED_HOSTS改成通配符 *
        ALLOWED_HOSTS = ["*"]



二、

1、表单的提交(登录)
    - submit -> action -> 对应函数(参数request(数据信息))-> 处理
        注意:必须要有name属性 *****
    - 提交到服务器的是QueryDict对象,可以通过get获取值


2、form表单提交的三个要素
    - form标签必须有action和method属性
    - 所有获取用户输入的标签必须放在form表单中,必须有name属性
    - 必须有submit按钮


3、redirect 跳转,改变方向
    - 跳转到别人的页面,自己的页面
        - 跳转比人页面
            redirect("https://baidu.com")
        - 跳转自己页面
            redirect("/相对路径/")

4、Django必会三件套  from django.shortcuts import
    - HttpRequest    返回一个指定的字符串
    - render           返回一个HTML文件        HTML文件 模板语言
    - redirect        跳转                   路径     URL


5、request相关属性
    - POST
    - GET
    - method

6、Django的模板语言
    {{ 变量 }}

7、Django项目project
    - app(应用) -> 不同的功能放在不同的app中
        - 命令 :
            - 创建app  
                python manage.py startapp app01(应用名)    
            - 告诉Django创建了app
                在settings中的 INSTALLED_APPS 添加新创建的app(app名.apps.apps中的类)


8、程序链接mysql
    - 使用pymysql模块
        - 导入pymysql
        - 创建链接
        - 获取执行命令的游标
        - 用游标执行SQL语句
        - 获取SQL语句的执行结果
        - 关闭游标
        - 关闭链接

    - ORM - Object Relationship Mapping (对象关系映射)
    - 这时,创建一种工具 帮助我们翻译SQL语句(ORM - 面向对象的思想)
        - 优点
            - 开发效率高
            - 开发不用直接写SQL语句
        - 缺点
            - 执行效率低

    ORM         DB

    类            数据表
    属性            字段
    对象            数据行





    - Django项目project
        - app(应用) -> 不同的功能放在不同的app中
            - 命令 :
                - 创建app  
                    python manage.py startapp app01(应用名)    
                - 告诉Django创建了app
                    在settings中的 INSTALLED_APPS 添加新创建的app(app名.apps.apps中的类)
    - Django中ORM使用
        - 用处:
            - 操作数据表
            - 操作数据行
        - 使用
            - 手动创建数据库
            - 告诉Django连那个数据库
                - settings中配置DATABASES
                DATABASES = {
                    'default': {
                        'ENGINE': 'django.db.backends.mysql',  # 链接数据库的类型
                        'NAME': 'db',  # 链接数据库的名字
                        'HOST': '127.0.0.1',  # 数据库主机地址
                        'PORT': 3306,  # 数据库端口
                        'USER': 'root',  # 数据库用户名
                        'PASSWORD': '123456',  # 数据库密码
                    }
                }

            - 用什么链接数据库?
                - 利用第三方包 pymysql 和 MySQLdb(py2中)
                - 告诉Django用pymysql模块代替默认的MySQLdb链接MySQL数据库
                    和settings.py同级的__init__.py文件,写上
                    import pymysql
                    pymysql.install_as_MySQLdb()

            - 在app/models.py的文件中创建类
                类必须继承models.Model

            - 两个命令
                - python manage.py makemigrations -> 相当于拿个小本本把models.py的变更记录下来
                - python manage.py migrate -> 把上面的变更记录翻译成sql语句,去数据库执行

            - ORM查询
                User.object.filter(email='', pwd='')
原文地址:https://www.cnblogs.com/xiao-xue-di/p/9595398.html