Django 基础操作

Django 基础操作

1.Django的命令:

  1. 下载
    1. pip install django==1.11.16
    2. pip install django==1.11.16 -i 源
  2. 创建项目
    1. django-admin startproject 项目名
  3. 启动项目
    1. cd 项目目录下 找到manage.py
    2. python manage.py runserver # 127.0.0.1:8000
    3. python manage.py runserver 80 # 127.0.0.1:80
    4. python manage.py runserver 0.0.0.0:80 # 0.0.0.0:80
  4. 创建一个APP
    1. python manage.py startapp app名称
    2. 注册
  5. 数据库迁移
    1. python manage.py makemigrations # 在app下的migrations文件夹下记录 models的变更记录
    2. python manage.py migrate # 将models的变更记录同步到数据库中

2.Django的配置

  1. 注释一个CSRF的中间件 可以提交POST

  2. databases 数据库

    1. ENGINE : mysql
    2. NAME : 数据库的名称
    3. HOST:主机的IP
    4. PORT:3306
    5. USER: 用户名
    6. PASSWORD: 密码
  3. 静态文件的配置

    1. STATIC_URL = '/static/' # 别名

    2. STATICFILES_DIRS = [

      ​ os.path.join(BASE_DIR,'static')

      ]

  4. app

    1. INSTALLED_APPS = [

      ​ 'app01' ,

      ​ 'app01.apps.App01Config'

      ]

  5. TEMPLATES 模板相关的配置

    1. DIRS [ os.path.join(BASE_DIR,'templates')]

3.Django使用mysql数据库的流程:

  1. 创建一个mysql数据库

  2. 在settings中进行配置

    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.mysql',
            'NAME': 'bookmanager',
            'HOST': '127.0.0.1',
            'PORT': 3306,
            'USER': 'root',
            'PASSWORD': '',
    
        }
    }
    
  3. 在与settings同级目录下的init的文件中写:
    告诉Django使用pymysql模块连接mysql数据库

    import pymysql
    pymysql.install_as_MySQLdb()
    
  4. 在app下的models中写类(models.Model)

    class Publisher(models.Model):  # app01_publisher
        pid = models.AutoField(primary_key=True)  # pid 主键
        name = models.CharField(max_length=32, unique=True)  # 出版社名称
    
        def __str__(self):
            return self.name
    
    
    class Book(models.Model):
        title = models.CharField(max_length=32, unique=True)  # 书籍的名称
        publisher = models.ForeignKey('Publisher', on_delete=models.CASCADE)  # 关联了出版社
    
        def __str__(self):
            return self.title
    
    
    class Author(models.Model):
        name = models.CharField(max_length=32, unique=True)  # 作者的名字
        books = models.ManyToManyField('Book')  # 表示作者和书籍 多对多的关系
        # books = models.ManyToManyField('Book', through='Author_book',)  # 表示作者和书籍 多对多的关系
    
        def __str__(self):
            return self.name
    

    5.数据库迁移的命令

    1. python manage.py makemigrations # 在app下的migrations文件夹下记录 models的变更记录
    2. python manage.py migrate # 将models的变更记录同步到数据库中

4.ORM的对应关系

​ 类 —— 》 表

​ 对象 ——》 记录(数据行)

​ 属性 ——》 字段

5.ORM操作

  1. 查询
    1. models.Publisher.objects.all() # 查询所有的数据 ——》 QuerySet 对象列表
    2. models.Publisher.objects.get() # 获取满足条件的一个对象 ——》 单独的对象
    3. models.Publisher.objects.filter() # 获取满足条件的所有对象 ——》对象列表
    4. models.Publisher.objects.all().order_by('id') # 排序 —— 》 对象列表
    5. pub_obj.pk ——》 主键
    6. pub_obj.name
    7. 外键
      1. book_obj.publisher ——》 关联的对象
      2. book_obj.publisher_id ——》从book表中获取关联对象的ID
      3. book_obj.publisher.name ——》 关联的对象的属性
    8. 多对多
      1. author_obj.books ——》 管理对象
      2. author_obj.books.all() ——》 关联的所有的对象 对象列表
      3. book_obj.author_set ——》管理对象、
  2. 增加
    1. models.Publisher.objects.create(name='xxx') ——》 对象
    2. 外键
      1. models.Book.objects.create(title='xxx',publisher=pub_obj)
      2. models.Book.objects.create(title='xxx',publisher_id=pub_obj.id)
    3. 多对多
      1. models.Author.objects.create(name='xxxx') ——》 author_obj
      2. author_obj.books.set([多个要关联对象的id,])
      3. author_obj.books.set([多个要关联对象,])
  3. 删除
    1. models.Author.objects.get(id=1).delete()
    2. models.Author.objects.filter(id=1).delete()
  4. 修改
    1. pub_obj.name = 'new_xxxx'
    2. pub_obj.save()
    3. 外键
      1. book_obj.title = 'xxxx'
      2. book_obj.publisher = pub_obj 或者 book_obj.publisher_id = pub_obj .id
      3. book_obj.save()
    4. 多对多
      1. author_obj.name = 'new_name'
      2. author_obj.save()
      3. author_obj.books.set([多个要关联对象,]) author_obj.books.set([多个要关联对象的id,])

6.request

  1. request.method ——》 请求方式 8 种 GET/POST
  2. request.GET ——》 url上的参数 xxxx/?id=1&name=aelex {} [] request.GET.get('id')
  3. request.POST ——》 form表单提交的POST的数据 {} [] request.POST.get()

7.函数的返回值

  1. HttpResponse('字符串') ——》 返回字符串
  2. render(request,'模板的文件名',{k1:v1}) ——》返回一个完整的页面
  3. redirect(''跳转的地址'') ——》 重定向 响应头 Location : '跳转的地址'

3.get和post

  1. get ——获取一个页面

    浏览器地址栏中输入地址,回车

    a标签

    form表单默认发送get请求

    携带参数:127.0.0.1:8000/edit_publisher/?pk=1

    request.GET {}

    1. post ——提交数据

    form表单指定method=‘post’

    request.POST

posted @ 2019-08-03 15:47  写bug的日子  阅读(93)  评论(0编辑  收藏  举报