zoukankan      html  css  js  c++  java
  • django的阶段总结

    Django回顾
    
    1 web应用
       本质是基于socket实现的应用程序
       
       浏览器-----------服务器
       
    2 http协议:应用层协议
        1 基于TCP协议
        2 基于请求响应
        3 短连接
        4 无状态保存(引入了cookie,session技术)
             
                      请求协议
               浏览器----------->服务器
                    <------------
                      响应协议
     
        请求协议
            ''
            请求首行      GET   path?get数据   HTTP/1.1
            请求头         
            userAgent: win Chorome/IPhone 
            contentType:json   application/x-www-form-urlencoded
            空行
            请求体(post才有请求体)
            a=1&b=2
            {"a":1,"b":2}
            ''
                
            如何给服务器发送json数据
                给服务器发送请求方式:
                      1 地址栏     get请求
                      2 form表单   get   post请求  (无法发送json数据)
                      3 a标签连接请求    get请求
                      4 Ajax请求   get(查)  post(提交数据添加记录)  put(更新)  delete(删除) ......
                            
                            $.ajax({
                                 url:"/index/",
                                 type:"post",
                                 data:{
                                    a:1,
                                    b:2
                                 },  # 默认urlencoded编码
                                 success:function(res){
                                 
                                 
                                 }
                            
                            })
                            
                            
                            发送json数据
                            
                            $.ajax({
                                 url:"/index/",
                                 type:"post",
                                 contentType:"json"
                                 data:JSON.stringfy({
                                    a:1,
                                    b:2
                                 }), 
                                 success:function(res){
                                     
                                 
                                 }
                            
                            })
                            
                            
                            
                            注意:Django解析不了json数据,只能自己利用request.body解析原生数据
                            
                                   
                
        响应协议
                响应首行    HTTP/1.1  200  OK
                响应头
                contentType:"json"
                ...
                空行
                响应体    
    
                响应状态码:
                          1开头: 请求中
                          200:请求成功
                          3开头:重定向
                          4: 文件路径找不到
                          5:服务器错误                      
                         
                         
                         
                         
    Django  
        
        MTV+url路由分发:
            M: model.py           
            T:  Template:存放模板文件
            V: 视图 逻辑
                
                             
        
    url路由分发:
    
            反向解析:
                    url(r'^role/add/$', views.role, name='role_add'),
                    url(r'^role/edit/(d+)/$', views.role, name='role_edit'),
            
                   视图:
                        
                        path=reverse("role_add")  # "role/add/"
                        path=reverse("role_edit",args=(1,2))  # "role/edit/1/"
                   
                   
                   模板:
                       {% url 'role_add' %}
                       {% url 'role_edit' 2 %}
               
    
            名称空间:
                re_path(r'^app01/', include(("app01.urls","app01"),namespace="app01",)),
    
    
    视图函数:
            
            request对象:存储这次请求所有请求信息:
                   属性:
                     HttpRequest.GET
                     HttpRequest.POST
                                ---- urlencoded编码
                                ---- 注意:键值对的值是多个的时候,比如checkbox类型的input标签,select标签,需要用:
                                            request.POST.getlist("hobby")                    
                     HttpRequest.body 一个字节串,代表请求报文的主体。
                     HttpRequest.path
                     ttpRequest.method
                     HttpRequest.META  请求头
                     HttpRequest.FILES
                     HttpRequest.COOKIES
                     HttpRequest.session    session中间件 源码
                     HttpRequest.user       认证中间件 源码
                     
                   方法:     
                      HttpRequest.get_full_path()    
                      HttpRequest.is_ajax()             
                 
            HttpResponse对象:
                    obj=HttpResponse("hello")
                    obj=render(request,"index.html")
                    obj=redircet("/index/")
                    
                                
            FBV与CBV : ******源码流程
            
                views:
                      from django.views import View
                      class BookView(View):
                            
                            def get(self,request):
                                    pass
    
                            def post(self,request):
                                    pass                                
                urls.py:
                       url("books",BookView.as_view())        
    
    
    
    模板层:
            
            含有模板语法的html文件成为模板文件
            render方法渲染引擎
            模板语法:
                 
                {{}}:渲染变量
                      ---- 深度查询 句点符. 注意:  .无参方法
                      ---- 过滤器 date,safe,add,slice,
                {% %}:渲染标签            
                     {%for i in [111,222,333]%}
                           {%if i!= 222%}
                               <p>i</p>
                           {%endif%}
                     {%endfor%}    
    
                自定义标签和过滤器 
                      1、在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.            
                      2、 在app中创建templatetags模块(模块名只能是templatetags)
                      3、 创建任意 .py 文件,如:my_tags.py
                                from django import template             
                                register = template.Library()   #register的名字是固定的,不可改变
                                                              
                                @register.filter
                                def filter_multi(v1,v2):
                                    return  v1 * v2
                                    
                                @register.simple_tag
                                def simple_tag_multi(v1,v2):
                                    return  v1 * v2
    
    
                       4、模板中使用:
                                {% load my_tags %}  
          
                                # num=12
                                {{ num|filter_multi:2 }} #24
                                 
                                {{ num|filter_multi:"[22,333,4444]" }}
    
    
    
                继承 extend:
                        创建base.html:
                            构建钩子
                            {%block css%}
                                
                            {%endblock css%}
                            
                            {%block content%}
                                <p>123</p>
                            {%endblock%}
                            
                            {%block js%}
                                
                            {%endblock js%}
                        子模板继承:
                             {%extends 'base.html' %}
                             
                             {%block content%}
                                <p>111</p>
                             {%endblock%}
    
    ORM:
        class  Book(model.Model):
             title=models.CharFiled(max_length=32)
             
    
    
            类-----------------表    #  Book------- app01_book
            属性变量-----------字段  #  title------ title
            属性对象-----------约束     #  models.CharFiled(max_length=32)
            类实例对象---------表记录 
    
    
        单表操作
        
                model的元类信息:
                     Book._meta.verbose_name
                     '书籍'
                     Book
                     <class 'app01.models.Book'>
                     Book._meta.model_name
                     'book'
                     Book._meta.app_label
                     'app01'
                    class Book(models.Model):
                        title=models.CharField(max_length=32,verbose_name="书籍名称")
    
    
                         def __str__(self):
                            return self.title
                         class Meta:
                                app_label="APP01"
                                db_table="app01book"
                                unique_together=["title","price"]
                                verbose_name="书籍"
                                ordering=["price"]    
               
               
               class Book(models.Model):
                         id=models.AutoField(primary_key=True)
                         title=models.CharField(max_length=32)
                         state=models.BooleanField()
                         pub_date=models.DateField()
                         price=models.DecimalField(max_digits=8,decimal_places=2)
                         publish=models.CharField(max_length=32)
                               
               
               更多参数:
                        (1)null
     
                        如果为True,Django 将用NULL 来在数据库中存储空值。 默认值是 False.
                         
                            blank
                         
                        如果为True,该字段允许不填。默认为False。
                        要注意,这与 null 不同。null纯粹是数据库范畴的,而 blank 是数据验证范畴的。
                        如果一个字段的blank=True,表单的验证将允许该字段是空值。如果字段的blank=False,该字段就是必填的。
                         
                        (2)default
                         
                        字段的默认值。可以是一个值或者可调用对象。如果可调用 ,每有新对象被创建它都会被调用。
                         
                        (3)primary_key
                         
                        如果为True,那么这个字段就是模型的主键。如果你没有指定任何一个字段的primary_key=True,
                        Django 就会自动添加一个IntegerField字段做为主键,所以除非你想覆盖默认的主键行为,
                        否则没必要设置任何一个字段的primary_key=True。
                         
                        (4)unique
                         
                        如果该值设置为 True, 这个数据字段的值在整张表中必须是唯一的
                         
                        (5)choices
                        由二元组组成的一个可迭代对象(例如,列表或元组),用来给字段提供选择项。 如果设置了choices ,
                        默认的表单将是一个选择框而不是标准的文本框,<br>而且这个选择框的选项就是choices 中的选项。
                
    
                数据库配置:
                    DATABASES = {
                        'default': {
                            'ENGINE': 'django.db.backends.mysql',
                            'NAME':'bms',           # 要连接的数据库,连接前需要创建好
                            'USER':'root',        # 连接数据库的用户名
                            'PASSWORD':'',        # 连接数据库的密码
                            'HOST':'127.0.0.1',       # 连接主机,默认本级
                            'PORT':3306            #  端口 默认3306
                        },
                        
                        'app01': {
                            'ENGINE': 'django.db.backends.mysql',
                            'NAME':'bms',           # 要连接的数据库,连接前需要创建好
                            'USER':'root',        # 连接数据库的用户名
                            'PASSWORD':'',        # 连接数据库的密码
                            'HOST':'127.0.0.1',       # 连接主机,默认本级
                            'PORT':3306            #  端口 默认3306
                        },
                        
                    }
                
                针对每一个注册app下的models.py创建对应的表结构            
                    python manage.py makemigrations
                    python manage.py migrate
               
               添加记录的两种方式:
                    book_obj=Book.objects.create(title="python葵花宝典",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12")
                    
                    book_obj=Book(title="python葵花宝典",state=True,price=100,publish="苹果出版社",pub_date="2012-12-12")
                    book_obj.save()
                 
               查询表纪录:
                    <1> all():                  查询所有结果
      
                    <2> filter(**kwargs):       它包含了与所给筛选条件相匹配的对象
                      
                    <3> get(**kwargs):          返回与所给筛选条件相匹配的对象,返回结果有且只有一个,
                                                如果符合筛选条件的对象超过一个或者没有都会抛出错误。
                      
                    <4> exclude(**kwargs):      它包含了与所给筛选条件不匹配的对象
                     
                    <5> order_by(*field):       对查询结果排序
                      
                    <6> reverse():              对查询结果反向排序
                      
                    <8> count():                返回数据库中匹配查询(QuerySet)的对象数量。
                      
                    <9> first():                返回第一条记录
                      
                    <10> last():                返回最后一条记录
                      
                    <11> exists():              如果QuerySet包含数据,就返回True,否则返回False
                     
                    <12> values(*field):        返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列
                                                model的实例化对象,而是一个可迭代的字典序列
                                                
                                                
                                                Book.objects.filter(price__gt=100).values("title","price")
                                                '''
                                                queryset=[]
                                                for obj in Book.objects.filter(price__gt=100):
                                                    queryset.append({
                                                        "title":obj.title,
                                                        "price":obj.price
                                                    
                                                    })
                                                
                                                '''
                                                
                    <13> values_list(*field):   它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列
                                                
                                                    Book.objects.filter(price__gt=100).values("title","price")
                                                '''
                                                queryset=[]
                                                for obj in Book.objects.filter(price__gt=100):
                                                    queryset.append((
                                                        obj.title,
                                                        obj.price
                                                    
                                                    ))
                                                
                                                '''
                                                
                                                
                                                
                    <14> distinct():            从返回结果中剔除重复纪录           
    
                基于双下划线的模糊查询
                    Book.objects.filter(price__in=[100,200,300])
                    Book.objects.filter(price__gt=100)
                    Book.objects.filter(price__lt=100)
                    Book.objects.filter(price__range=[100,200])
                    Book.objects.filter(title__contains="python")
                    Book.objects.filter(title__icontains="python")
                    Book.objects.filter(title__startswith="py")
                    Book.objects.filter(pub_date__year=2012)
                    Book.objects.filter(pub_date__year__gt=2012)
                
                
                
                删除表纪录
                    Book.objects.filter(price__in=[100,200,300]).delete()
                    Book.objects.get(pk=1).delete()
                     
                
                修改表纪录
                    # 方式1
                    Book.objects.filter(title__startswith="py").update(price=120)
                    # 方式2
                    book=Book.objects.filter(title__startswith="py").first()
                    book.price=1000
                    book.save()
                    
                    
        多表操作
                from django.db import models
    
                # Create your models here.
    
    
                class Author(models.Model):
                    nid = models.AutoField(primary_key=True)
                    name=models.CharField( max_length=32)
                    age=models.IntegerField()
    
                    # 与AuthorDetail建立一对一的关系
                    authorDetail=models.OneToOneField(to="AuthorDetail",on_delete=models.CASCADE)
    
                class AuthorDetail(models.Model):
    
                    nid = models.AutoField(primary_key=True)
                    birthday=models.DateField()
                    telephone=models.BigIntegerField()
                    addr=models.CharField( max_length=64)
    
                class Publish(models.Model):
                    nid = models.AutoField(primary_key=True)
                    name=models.CharField( max_length=32)
                    city=models.CharField( max_length=32)
                    email=models.EmailField()
                    '''
                        create table app01_publish(
                           nid   INT auto_increment primary key
                           name  varchar(32)
                           city  varchar(32)
                           email varchar(32)
                        
                        )
                    
                    '''
    
    
                class Book(models.Model):
    
                    nid = models.AutoField(primary_key=True)
                    title = models.CharField( max_length=32)
                    publishDate=models.DateField()
                    price=models.DecimalField(max_digits=5,decimal_places=2)
    
                    # 与Publish建立一对多的关系,外键字段建立在多的一方
                    publish=models.ForeignKey(to="Publish",to_field="nid",on_delete=models.CASCADE)
                    # 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表
                    authors=models.ManyToManyField(to='Author',)
                    '''
                        create table app01_book(
                               nid   INT auto_increment primary key
                               title  varchar(32)
                               publishDate  date
                               price decimal(5,2)
                               publish_id  INT
                               ForeignKey publish_id references Publish(nid)
                        )
                        
                        
                        create book_authors(
                             id   INT auto_increment primary key
                             book_id INT
                             ForeignKey book_id references app01_book(nid)
    
                             author_id INT
                             ForeignKey author_id references app01_author(nid)                             
                        )
                    
                    '''
    
    
                1 添加记录
                   
                    针对一对多:
                           
                       book_obj=Book.objects.create(title="python葵花宝典",price=100,publishDate="2012-12-12",publish_id=1)
                       
                       pub_obj=Publish.objects.get(pk=1)
                       book_obj=Book.objects.create(title="python葵花宝典",price=100,publishDate="2012-12-12",publish=pub_obj)
    
          
                    针对多对多:
                        
                              book_authors
                              
                                  id  book_id    author_id
                                  
                                   4    2           3
                                   5    1           4
    
                             book=Book.objects.get(pk=1)
                             book.authors.add(1,2,3)
                             
                             book=Book.objects.get(pk=2)
                             book.authors.add(3)
                             
                             book=Book.objects.get(pk=1)
                             book.authors.remove(2,3)
                            
                             book=Book.objects.get(pk=1)
                             book.authors.clear()
                            
                             book=Book.objects.get(pk=1)
                             book.authors.set([4,5]) # 列表不打散
    
    
                2   补充中介模型
                
                
                    场景:
                        student
                           id   name
                            1    A
                            1    B
                           
                        course
                            id   name                     
                             1    python
                             2    linux
                       
                    
                        score
                        
                             id      student_id        course_id    score
                              1            1                1         78
                              2            1                2         67
                              
                              
                              
                        class  Score(models.Model):
                               student=ForeignKey("Student")
                               course=ForeignKey("Course")
                               score=models.IntegerField()
                               
                               
                               
                           
                        # 中介模型方式:
                                
                                
                                class Student(models.Model):
                                    name = models.CharField( max_length=32)
                                    courses=models.ManyToManyField("Courses",through="Score")
                                    
                                class Course(models.Model):
                                    name = models.CharField( max_length=32)    
                                                                    
                                class Score(models.Model):
                                     student=models.ForeignKey("Student")
                                     course=models.ForeignKey("Course")
                                     score=models.IntegerField()
                                     
                                     
                3 跨表查询
                        class Book(models.Model):
    
                            nid = models.AutoField(primary_key=True)
                            title = models.CharField( max_length=32)
                
                            # 与Publish建立一对多的关系,外键字段建立在多的一方
                            publish=models.ForeignKey(to="Publish",to_field="nid",relate_name="xxx",on_delete=models.CASCADE)
                            # 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表
                            authors=models.ManyToManyField(to='Author',)
                        ####################   基于对象(子查询)
                        
                        正向查询按字段,反向查询relate_name,如果没有设置,按表名小写_set
                        
                            book=Book.objects.get(pk=1)
                            book.publish
                            book.authors.all()
                            
                            
                            pub=Publish.objects.get(pk=1)
                            pub.xxx.all()
                            
                            
                            author=Author.objects.get(pk=1)
                            author.book_set.all()
                            
                            author.authordetail
                            authordetail.author
                        
                    
                        ####################   基于双下划线(join查询)
    
                            id  title  pub_id
                             1     A      1
                             2     B      1
                             
                             
                             Publish
                             id   name
                              1   人民
                              2   北京
    
                             innerjoin
    
                                1     A      1   1   人民
                                2     B      1   1   人民
    
                             rightjoin
                                1   人民      1     A      1
                                1   人民      2     B      1
                                2   北京      null  null   null
                             
                             
                             
                                book_authors
                              
                                  id  book_id    author_id
                                  
                                   1    1           1
                                   2    2           1 
                                   2    3           1 
                                   3    3           2
                          
                        正向查询安字段,反向查询按表名小写  
    
                        # 查询python出版社的名字
                        Book.objects.filter(title="python").values("publish__name")    
                        Publish.objects.filter(book__title="python").values("name")                    
    
                        # 查询alex出版过的书籍的名称
                        
                        Author.objects.filter(name__startswith="a").values("book__title")
                        Book.objects.filter(authors__name__startswith="a")
                
                
                4 分组查询(基于双下划线(join查询))
                        聚合
                        # 计算所有图书的平均价格
                            Book.objects.all().aggregate(AVG("price"))
                            Book.objects.all().aggregate(MAX("price"))
                        分组:
                            id  name age   salary    dep
                            1   alex  12   2000     销售部
                            2   egon  22   3000     人事部
                            3   wen   22   5000     人事部
                            
                            
                            sql:select dep,AVG(salary)  from  emp  group by  dep
                            
                            orm:Emp.objects.values("dep").annotate(avg=AVG("salary")) # [{"dep":"销售","avg":5000},{}]                         
                        
                    
                        跨表分组查询
                            
                            book
                            
                            id   title     pub_id
                             1   python       1
                             2   linux        1
                             3   go           2
                             
                             
                             publish
                             
                             id   name
                              1   沙河
                              2   北京
                              
                             
                            
                            
                            查询每一个出版社的名称以及出版书籍的个数
                            
                            id   title     pub_id      id   name
                             1   python       1        1    沙河
                             2   linux        1        1    沙河
                             3   go           2        2    北京
                             
                             
                            Publish.objects.values(pk).annotate(c=Count("book")) # [{pk:1,c:2},{pk:2,c:1}]
                            Publish.objects.all.annotate(c=Count("book")).values("c","name") # [publish_obj,publish_obj]
                            
                            
                            # 查询每一个作者的名字以及出版书籍的最高价格
                            Author.objects.annotate(max_price=Max("book__price")).values("name","max_price")
                            
                            # 查询96年以后出生的每一个作者的名字以及出版书籍的最高价格
                            Author.objects.filter(birthday__year__gt=1996).annotate(max_price=Max("book__price")).values("name","max_price")
                            
                            # 查询不止一个作者的书籍名称以及关联的作者个数
                            Book.objects.all().annotate(c=Count("authors"))# [book1,book2,.....]
                            Book.objects.all().annotate(c=Count("authors")).filter(c__gt=1).values("title","c")
                            
                            # 查询每一个销售的名字以及今天对应的成单量
                            userinfo
                               id   name
                                1   sanjiang
                                2   jinjin
                                3   bingbing
                                
                            customer
                                id    name  deal_date       consultant
                                 1     A    2018-11-23          1
                                 1     B    2018-11-22          1
                                 1     C    2018-11-23          2
                                 1     D    2018-11-18          1
                                 1     E    2018-11-23          1
                                 1     F    2018-11-23          1
                                 1     Q    2018-11-23          1
                                                           
                            customer
                                id    name  deal_date       consultant      id    name
                                 1     A    2018-11-23          1            1   sanjiang
                                
                                 1     C    2018-11-23          2            2   jinjin
                                
                                 1     E    2018-11-23          3            3   bingbing
                                 1     F    2018-11-23          3            3   bingbing
                                 1     Q    2018-11-23          1            1   sanjiang
                            
                            
                            
                            # Userinfo.objects.filter(depart_id=1).filter(customer__deal_date=now).annotate(c=Count("customers")).values("name","c")
                            
                F与Q
                
                     Book.objects.filter(commnetNum__lt=F('keepNum'))
                     Book.objects.filter(commnetNum__lt=F('keepNum')*2)               
                     Book.objects.all().update(price=F("price")+30)             
                     
                     Book.objects.filter(Q(title__startswith="py")|Q(price__gt=100))
                     
                     q=Q()
                     q.conector="or"
                     q.children.append(("title__startswith","py"))
                     q.children.append(("price__gt",100))
                     
                     
                     
                     
    Django组件:
            1 文件上传
                    form表单
                            <form action="/file_put/" method="post" enctype="multipart/form-data">
                                姓名<input type="text" name="user">
                                文件<input type="file" name="file_obj">
                                <input type="submit">
                            </form>
                        
                    
                    ajax形式
                    
                            <div>
                                姓名<input type="text" id="user">
                                文件<input type="file" name="file_obj" id="file">
                                <input type="button" class="filebtn" value="提交">
                                <p class="msg"></p>
                            </div>
                            
                            
                            // 发送文件
                              $(".filebtn").click(function () {
    
    
                                  var formdata=new FormData();
                                  formdata.append("file_obj",$("#file")[0].files[0]);
                                  formdata.append("user",$("#user").val());
    
                                  $.ajax({
                                      url:"/file_put/",
                                      type:"post",
    
                                      // Ajax上传文件必备参数
                                      processData: false ,    // 不处理数据
                                      contentType: false,    // 不设置内容类型
    
                                      data:formdata,
                                      success:function (response) {
                                          console.log(response);
                                          if (response=="OK"){
                                              $(".msg").html("提交成功!")
                                          }
                                      }
                                  })
                                  
                              })
                                            
                    
                    
                    视图: 
                         def file_put(request):
    
                                print(request.POST)
                                print(request.FILES)
                                file_obj=request.FILES.get("file_obj")
                                # 文件对象有一个name属性,获取文件名称字符串
                                print(file_obj.name)
                                path=file_obj.name
    
                                path=os.path.join(settings.BASE_DIR,"media","img",path)
                                with open(path,"wb") as f:
                                    for line in file_obj:
                                        f.write(line)
    
    
                                return HttpResponse("OK")
                        
            2 cookie session auth
                    cookie概念:
                           针对每一个服务器,保存在客户端(浏览器)的一个key-value结构数据,可以理解成一个字典结构
                    cookie语法:
                           obj=HttpResponse()
                           obj=render()
                           obj=redirect()
                           # 设置cookie
                           obj.set_cookie("key","value",3600*24)
                           # 获取cookie
                           request.COOKIES
                           # 删除cookie
                           obj.delete_cookie("key","value")
            
            
                    应用:
                        登录认证
                        验证码
                        保存上次访问时间
                        浏览过的商品
                    
                    session语法:
                        
                          
                          # 设置session
                          
                          request.session["key"]="value"
                               '''
                                if request.cookie("session_id"):
                                    1 获取随机字符串session_id:21342saidf92349
                                    2 去django-seeson表中过滤session-key=21342saidf92349的记录
                                        session-key         session-data
                                        21342saidf92349    {"key":"value"}
                                    3 更新:
                                else:                            
                               
                               
                                    1 生成一个随机字符串:21342saidf92349
                                    2 去django-seeson表中创建一条记录
                                        session-key         session-data
                                        21342saidf92349    {"key":"value"}
                                    3 响应setcookie("session_id",21342saidf92349)
                               '''
                          # 获取session
                               request.seesion["key"]
                               '''
                                 1 获取cookie中key为session_id的对应值:21342saidf92349
                                 2 去django-session表中过滤session-key=21342saidf92349的记录对象obj
                                 3 obj.session-data.get("key"")
                               
                               '''
                    
                           
                      
            
            3 form  modelform   modelformset
            4 中间件
                 
    类装饰器
        imageField
        FileField
        media
        
    数据库备份命令
    
    
    https://www.cnblogs.com/yuanchenqi/articles/6755717.html                   
  • 相关阅读:
    相似数据检测算法
    从一个简单的程序中你能看到什么?(面向对象的真帝)
    如何更好的理解类和结构
    从一个很简单的文件上传来品味面向对象的大局观(抽象类和功能类)
    网站中的缩略图是如何生成的?(C#处理图像)
    进程间通信(一)
    POSIX线程-(六)
    进程间通信(四)
    进程间通信(三)
    POSIX线程-(五)
  • 原文地址:https://www.cnblogs.com/kenD/p/10062296.html
Copyright © 2011-2022 走看看