web框架django 第一天课上总结

###OSI七层模型
- 应用层
- 表示层                应用层
- 会话层
- 传输层                
- 网络层
- 数据链路层   
- 物理层 

- socket  套接字  位于应用层和传输层之间虚拟层,一组接口

- c/s   b/s 

- 百度服务器 socket服务端
    - 1.绑定ip和端口
    - 2.等待连接
    - 5.接受数据
    - 6.返回数据
    - 9.断开连接    

- 浏览器 socket客户端
    - 3.连接服务端
    - 4.发送数据
    - 7.接受数据
    - 8.浏览器渲染数据
    - 9.断开连接    
    

###HTTP 
- 1.请求和响应
    - 请求(request)   浏览器给服务器发的消息 
    - 格式:
        - '请求方法 URL路径 协议版本
        - k1: v1
        - k2: v2
            
        - 请求数据'
        - GET 没有请求数据

    - 响应(response)  服务器给浏览器回的消息
    - 格式:
        - 'HTTP/1.1 状态码 状态描述
        - k1: v1
        - k2: v2
        
        - 响应数据(HTML文本)'

- 2.请求方法 8种
    - GET   获取一个页面
    - POST  提交数据
    
- 3.状态码
    - 1xx 
    - 2xx   200 201 
    - 3xx  重定向
    - 4xx  请求的错误  404 403 
    - 5xx  服务器的错误 
        

###web框架的功能
- 1.socket收发消息
- 2.根据不同的路径返回不同结果
- 3.返回动态页面 (字符串的替换)  模板的渲染
    
- Django  flask  tornado 

### 1.下载安装
- 1.命令行:
    - pip install django==1.11.22 -i https://pypi.tuna.tsinghua.edu.cn/simple/
    - pip install django 不指定版本号,默认安装最新版

- 2.pycharm         
    
        
### 2.创建项目
- 1.命令行
    - 切换一个存放项目的目录下
    - django-admin startproject 项目名称
    
- 2.pycharm
    - file _> new project _> 左侧选Django ——》 输入项目的路径 ——》 选择解释器 ——》 创建
    
        
###3.启动
- 1. 命令行
    - 切换到项目的根目录下  manage.py
    - python manage.py runserver  # 默认127.0.0.1:8000 
    - python manage.py runserver 80 # 指定端口号127.0.0.1:80
    - python manage.py runserver 0.0.0.0:80 #共享并指定端口号 0.0.0.0:80
    
- 2. pycharm 
        
    
###4.配置
    - BASE_DIR  项目的根目录
    - TEMPALTES  模板的配置  DIRS = []
    - DATABASES  数据库
    - STATIC_URL ='/static/'  静态文件的别名
    
    - STATICFILES_DIRS = [    # 以后静态文件找不到 首先看这个配置
        os.path.join(BASE_DIR,'static')
    ]

    
###5.APP
    - 创建
        - 命令行:python manage.py startapp app名称
        
    - 注册:
        INSTALLED_APPS = [
                'django.contrib.admin',
                ...
                'app01',
                'app01.apps.App01Config'  # 推荐的方式
            ]

    
###6.提交POST请求
    目前情况 注释 MIDDLEWARE 
     'django.middleware.csrf.CsrfViewMiddleware'
     
    
###7.urls.py 
     - url路径和函数的对应关系
         urlpatterns = [
                url(r'^admin/', admin.site.urls),
                url(r'^login/', views.login),
            ]


###8.写函数  
    - app下的views.py中
    
    - def xxx(request):
        - request  —— 请求相关的内容
        - request.method  —— 请求方式  GET POST 
        - request.POST    —— form 表提交POST请求的数据   {}   
        
        - return 响应
        
    - 响应:
        - from django.shortcuts import render, HttpResponse, redirect
        - HttpResponse   —— 》  返回的字符串  
        - render(request,'模板的文件名',{})      ——》 返回是一个页面
        - redirect('重定向的地址')    ——》 重定向 
     
    - 模板  templates     

     
###9.orm对象关系映射(object relational mapping)
- django 使用mysql数据库的配置:
    - 1.创建一个mysql数据库
    - 2.在settings中配置数据库:
    - 3.使用pymysql模块连接mysql数据库
        在与settings同级目录下的__init__.py中:
        import pymysql
        pymysql.install_as_MySQLdb()    
    - 4.创建表,在app下的models.py中写类:
    ```python
    from django.db import models


    # Create your models here.
    class UserInfo(models.Model):
        username = models.CharField(max_length=32)  # varchar(32)
        password = models.CharField(max_length=32)

     ```
    
    - 5.执行数据库迁移的命令
        - python manage.py makemigrations  # 创建迁移文件  记录上models.py的变更记录 
        - python manage.py migrate          # 执行迁移数据库  
        
    
###10. orm具体操作:
```python
    ret = models.Publisher.objects.all()  # 查询所有的数据   对象列表
    for i in ret:
        print(i,type(i))   #  对象   对应数据库一条数据
        print(i.name,i.id) # 属性    字段的值

    models.Publisher.objects.filter(name=publisher_name)   查不到就是空列表

    models.Publisher.objects.create(name=publisher_name)   新增

    models.Publisher.objects.filter(id=id).delete()    删除


    修改
    publisher_name = request.POST.get('publisher_name')
    # 编辑
    pub_obj.name = publisher_name  # 只在内存中有变化
    pub_obj.save()  # 保存修改到数据库
```
    
    
###11.模板
```html
{% for pub in ret %}
      <tr>
        <td>{{ pub.id }}</td>
        <td>{{ pub.name }}</td>
      </tr>
{% endfor %}
```



     
    
原文地址:https://www.cnblogs.com/lilyxiaoyy/p/11258412.html