码迷,mamicode.com
首页 > 其他好文 > 详细

django 集合

时间:2019-02-23 21:50:07      阅读:184      评论:0      收藏:0      [点我收藏+]

标签:tps   接收   pip   mysql数据库   int   介绍   关联   sim   不同的   

1,前言

socket   位于应用层和传输层之间的一个抽象层,它是一个接口。
    百度的服务器(socket服务端)
        1. 启动socket
        2. 绑定ip和端口
        3. 监听
        6. 接收数据
        7. 发送数据
        9. 断开连接
    
    浏览器(socket客户端)
        4. 连接
        5. 发送数据
        8. 接收数据
        9. 断开连接
http协议:
1 // 请求方式:8种  GET POST DELTE PUT OPTIONS HEAD 
2 // 状态码:
3 // url  协议 ip 端口 路径 查询  ?k1=v1&k2=v2 
请求(request--浏览器给服务端发的消息)   get方式没有请求数据(请求体)
  请求方式 url 协议版本
            k1: v1
            k2: v2
         
            响应(response--服务端给浏览器发送的消息) 
     协议版本 状态码 状态描述
            k1: v1
            k2: v2
            
            HTML文本‘  响应数据(响应体)--> html文本
--* 浏览器发送请求接收响应的流程 *--
地址栏上输入URL,回车,发送GET请求
服务器接收请求,获取到路径,根据不同路径返回不同内容
服务器把响应的内容组成符合HTTP协议响应格式的字符串返回给浏览器
浏览器接收到响应,拿到响应体(HTML代码),进行渲染

2,web 框架本质  -- socket服务端 

功能:
            1. socket收发消息
            2. 根据不同的路径返回不同内容
            3. 动态页面 -  字符串的替换  模板的渲染
               
web框架的分类:
            flask          2     
            django         2 3   wsgiref uwsgi 模块接收请求 根据地址在urls.py匹配地址,找到对应函数执行,返回响应
            tornado        1 2 3 

3,django

-- cmd -- 
1 // pip install django==1.11.18 -i https://pypi.douban.com/simple/   # 下载
2 // django-admin startproject 项目名   # 创建项目  根目录右键+shift 打开命令行
3 // 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 改IP
4 // 配置

  TEMPLATES 模板配置
    ‘DIRS‘: [os.path.join(BASE_DIR, ‘templates‘)]
  DATABASES 数据库
  STATIC_URL = ‘/static/‘ # 别名

5 // 简单使用

from django.shortcuts import HttpResponse,render

def index(request):

  # return HttpResponse(‘这是index页面‘)
  return render(request, ‘index.html‘)


urlpatterns = [
url(r‘^admin/‘, admin.site.urls),

url(r‘^index/‘,index)

]

-- pycharm 下 --

settings ->project ->project interpreter ->双击django->左侧点Manage Repositories进入后点击右侧加号->添加进去http链接 specify version 选择版本 #下载

file ——》 new project ——》 项目名 ——》 选择解释器 ——》 create   #创建项目

点击绿三角(切记勿用右键启动文件)                    #运行


4,form 表单

form标签有 action=""   method="post"
input标签要有name属性
需要有一个type=submit的input标签 或者 button 按钮 

目前可以提交post请求:
在settings.py中注释MIDDLEWARE中的
django.middleware.csrf.CsrfViewMiddleware 
request.method  # 请求方式  POST GET 
request.POST    # form表单提交POST请求的数据 类似字典
return redirect(https://www.baidu.com/)
return redirect(/index/)   # 响应头 Location: /index/
-- APP --
命令行 : python manage.py startapp app名称

pycharm:tools ——》 run manage.py task ——》 startapp app名称

settings.py 里 # 注册APP   ‘app01.apps.App01Config‘   # 推荐写法

5, ORM的介绍和使用

django项目使用mysql数据库的流程:
1 创建数据库  cmd 下进去mysql
2 配置 settings  引擎/名称/host/port/user/password
3 在和settings.py同级目录下的init.py里
import pymysql
pymysql.install_as_MySQLdb()
4 创建表 (在app下的models.py中写类)
from django.db import models

class User(models.Model):
    username = models.CharField(max_length=20)
    password = models.CharField(max_length=20)
注意 : django提供的 ManyToManyField
数据库迁移:
python manage.py makemigrations #保存models的变更记录
python manage.py migrate #
from django.db import models

# 出版社
class Publisher(models.Model):
    pid = models.AutoField(primary_key=True)  # 主键
    name = models.CharField(max_length=32, unique=True)  # varchar(32)

    def __str__(self):
        return self.name


# 书籍
class Book(models.Model):
    name = models.CharField(max_length=32, unique=True)  # varchar(32)
    pub = models.ForeignKey(Publisher, on_delete=models.CASCADE)

    def __str__(self):
        return self.name


# 作者
class Author(models.Model):
    name = models.CharField(max_length=32, unique=True)
    books = models.ManyToManyField(Book,through=Author_book)  #django创建的 多对多关系表  

    def __str__(self):
        return self.name

class Author_book(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)  # 外键 关联哪张表
    book = models.ForeignKey(Book, on_delete=models.CASCADE)      # 外键 关联哪张表
    date = models.DateTimeField()  # python datetime    一个作者一本书 什么时候出的

 

 

发请求方式-- 输地址 form(默认get) a标签
函数返回值--
HttpResponse(‘字符串‘)
render(request,‘xx.html‘,{‘键‘:值}) -->完整页面渲染
redirect(‘要跳转的地址‘) --重定向 redirect(‘/index/‘)ORM -- 专注业务逻辑,提高开发效率
类-表 
对象-行
属性-字段
models.类.objects.all() -- 获取全部
表.objects.create(name=‘xxx‘,其他) #增
Book.objects.get(pk=1).delete() #删除
Book.objects.filter(pk=1).delete() #删
对象.字段 = 新值 对象.save() #保存到数据库
author_obj.books.set(books_id) #多对多 设置关系
正向查询 (manytomany表) 作者->书 作者.books. models.表名.objects.筛选条件
反向查询
对象.表名小写_set -- 多对多的管理对象

对象.表名小写_set.all() --所有的对象

---------------------------

类中的方法与独立函数不完全相同,因此不能直接将函数装饰器应用于类中的方法 ,我们需要先将其转换为方法装饰器
Django中提供了method_decorator装饰器用于将函数装饰器转换为方法装饰器
from django.views import View
from django.utils.decorators import method_decorator

class AddClass(View):

    @method_decorator(wrapper)
    def get(self, request):
        return render(request, "add_class.html")

    def post(self, request):
        class_name = request.POST.get("class_name")
        models.Classes.objects.create(name=class_name)
        return redirect("/class_list/")


 

django 集合

标签:tps   接收   pip   mysql数据库   int   介绍   关联   sim   不同的   

原文地址:https://www.cnblogs.com/zhangchen-sx/p/10424394.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!