Django 基础操作
Django 基础操作
1.Django的命令:
- 下载
- pip install django==1.11.16
- pip install django==1.11.16 -i 源
- 创建项目
- django-admin startproject 项目名
- 启动项目
- cd 项目目录下 找到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
- 创建一个APP
- python manage.py startapp app名称
- 注册
- 数据库迁移
- python manage.py makemigrations # 在app下的migrations文件夹下记录 models的变更记录
- python manage.py migrate # 将models的变更记录同步到数据库中
2.Django的配置
-
注释一个CSRF的中间件 可以提交POST
-
databases 数据库
- ENGINE : mysql
- NAME : 数据库的名称
- HOST:主机的IP
- PORT:3306
- USER: 用户名
- PASSWORD: 密码
-
静态文件的配置
-
STATIC_URL = '/static/' # 别名
-
STATICFILES_DIRS = [
os.path.join(BASE_DIR,'static')
]
-
-
app
-
INSTALLED_APPS = [
'app01' ,
'app01.apps.App01Config'
]
-
-
TEMPLATES 模板相关的配置
- DIRS [ os.path.join(BASE_DIR,'templates')]
3.Django使用mysql数据库的流程:
-
创建一个mysql数据库
-
在settings中进行配置
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'bookmanager', 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', 'PASSWORD': '', } }
-
在与settings同级目录下的init的文件中写:
告诉Django使用pymysql模块连接mysql数据库import pymysql pymysql.install_as_MySQLdb()
-
在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.数据库迁移的命令
- python manage.py makemigrations # 在app下的migrations文件夹下记录 models的变更记录
- python manage.py migrate # 将models的变更记录同步到数据库中
4.ORM的对应关系
类 —— 》 表
对象 ——》 记录(数据行)
属性 ——》 字段
5.ORM操作
- 查询
- models.Publisher.objects.all() # 查询所有的数据 ——》 QuerySet 对象列表
- models.Publisher.objects.get() # 获取满足条件的一个对象 ——》 单独的对象
- models.Publisher.objects.filter() # 获取满足条件的所有对象 ——》对象列表
- models.Publisher.objects.all().order_by('id') # 排序 —— 》 对象列表
- pub_obj.pk ——》 主键
- pub_obj.name
- 外键
- book_obj.publisher ——》 关联的对象
- book_obj.publisher_id ——》从book表中获取关联对象的ID
- book_obj.publisher.name ——》 关联的对象的属性
- 多对多
- author_obj.books ——》 管理对象
- author_obj.books.all() ——》 关联的所有的对象 对象列表
- book_obj.author_set ——》管理对象、
- 增加
- models.Publisher.objects.create(name='xxx') ——》 对象
- 外键
- models.Book.objects.create(title='xxx',publisher=pub_obj)
- models.Book.objects.create(title='xxx',publisher_id=pub_obj.id)
- 多对多
- models.Author.objects.create(name='xxxx') ——》 author_obj
- author_obj.books.set([多个要关联对象的id,])
- author_obj.books.set([多个要关联对象,])
- 删除
- models.Author.objects.get(id=1).delete()
- models.Author.objects.filter(id=1).delete()
- 修改
- pub_obj.name = 'new_xxxx'
- pub_obj.save()
- 外键
- book_obj.title = 'xxxx'
- book_obj.publisher = pub_obj 或者 book_obj.publisher_id = pub_obj .id
- book_obj.save()
- 多对多
- author_obj.name = 'new_name'
- author_obj.save()
- author_obj.books.set([多个要关联对象,]) author_obj.books.set([多个要关联对象的id,])
6.request
- request.method ——》 请求方式 8 种 GET/POST
- request.GET ——》 url上的参数 xxxx/?id=1&name=aelex {} [] request.GET.get('id')
- request.POST ——》 form表单提交的POST的数据 {} [] request.POST.get()
7.函数的返回值
- HttpResponse('字符串') ——》 返回字符串
- render(request,'模板的文件名',{k1:v1}) ——》返回一个完整的页面
- redirect(''跳转的地址'') ——》 重定向 响应头 Location : '跳转的地址'
3.get和post
-
get ——获取一个页面
浏览器地址栏中输入地址,回车
a标签
form表单默认发送get请求
携带参数:127.0.0.1:8000/edit_publisher/?pk=1
request.GET {}
- post ——提交数据
form表单指定method=‘post’
request.POST