一、今日内容总结:
day62 内容回顾: 1. django有关所有命令: pip install django==1.11.14 django-admin startproject 项目名称 cd 项目 python manage.py runserver 80 0.0.0.0:80 python manage.py startapp app01 python manage.py makemigrations # 保存models修改记录 python manage.py migrate # 操作数据表 2. settings相关: 1. templates 模板相关 DIRS 2. static 静态文件相关 STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR,'static') ] 3. 注释CSRF中间件 方便你提交POST请求 4. DATABASES 引擎:mysql NAME: 数据库名称 HOST:IP地址 PORT: 端口号 3306 USER: 用户名 root PASSWORD: 密码 '' 5. APP INSTALLED_APPS=[ 'app01', 'app01.apps.App01Config' ] 3.GET和POST GET: 1.form表单 默认get请求 2.直接在浏览器输入URL 3.a标签 127.0.0.1:8000/add_publisher/?id=1&name=alex request.GET 大字典 request.GET.get('id','1') request.GET['id'] POST: form表单提交 method='post' 参数不在URL显示,参数在请求体当中 request.POST 大字典 request.POST.get('id','1') request.POST['id'] 4. mysql数据的使用: 1. 创建mysql数据库 2. settings.py中要配置 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'day61', 'HOST': '127.0.0.1', 'PORT': 3306, 'USER': 'root', 'PASSWORD': '', } } 3. 告诉django使用pymysql来连接数据库: 在与项目同名的文件夹下的__init__.py文件中写: import pymysql pymysql.install_as_MySQLdb() 4. 在app01/models.py写类(必须继承models.Model) class Publisher(models.Model): id = models.AutoField(primary_key=True) name = models.CharField(max_length=32,null=False,unique=True) 5. 执行数据库迁移两条命令 python manage.py makemigrations # 保存models修改记录 python manage.py migrate # 操作数据表 5. ORM操作: 1. 查 models.Publisher.objects.all() # 查询所有的对象 ——》对象列表 QuerySet models.Publisher.objects.get(id='1') # 查询一个对象 ——》单独的对象 models.Publisher.objects.filter(id='1') # 查询所有符合条件的对象 ——》对象列表 QuerySet models.Publisher.objects.filter(id='1').order_by('id') 2. 增 models.Publisher.objects.create(name='xinhuachubanshe') 3. 删 # 删除一个对象 obj_list = models.Publisher.objects.filter(id='1') obj_list[0].delete() # 删除所有符合条件的对象 models.Publisher.objects.filter(id='1').delete() 4. 改 obj_list = models.Publisher.objects.filter(id='1') obj = obj_list[0] obj.name = 'asdasd' obj.save() 6. 模板语法: render(request,'HTML文件',{'publishers':obj_list}) {{ 变量 }} for 循环 {% for i in publishers %} {{ i.name }} {% endfor %} 今日内容: 1. 设计图书管理系统的表结构 书 出版社 作者 书和出版社 多对一 书和作者 多对多 2. 书的增删改查 3. 外键 class Book(models.Model): id = models.AutoField(primary_key=True) title = models.CharField(max_length=32, null=False, unique=True) publisher = models.ForeignKey(to='Publisher',on_delete=models.CASCADE) books = models.Book.objects.all() for book in books: print(book.publisher_id) # 数据库中的id print(book.publisher) # 关联的对象 # print(book.publisher.addr) print('=' * 30) 创建外键关联的方式 publisher = 关联的对象 publisher_obj = models.Publisher.objects.get(id=publisher_id) book_obj = models.Book.objects.create(title=title, publisher=publisher_obj) publisher_id = 关联对象的id book_obj = models.Book.objects.create(title=title, publisher_id=publisher_id) 4. 模板相关 {% if edit_book.publisher_id == publish.id %} <option value="{{ publish.id }}" selected>{{ publish.name }}</option> {% elif 其他条件 %} 操作 {% else %} <option value="{{ publish.id }}">{{ publish.name }}</option> {% endif %}
1.if模板语法
{% if 条件%}
操作....
{%elif 条件%}
操作
{%endif%}
2.外键
publisher = models.ForeignKey(to='Publisher')
操作时:
obj.publisher = 对象
或
obj.publisher_id = id
3.两种改方法不一样
obj1 = edit_obj_list[0]
obj2 = edit_obj_list[0]
两者值一样,但内存地址id不一样
edit_obj_list[0].name = new_name
edit_obj_list[0].save()
和
obj = edit_obj_list[0]
obj.name = new_name
obj.save()
不一样
4.其他
二、预习和扩展
1.str 和 repr
列表【】中的对象 直接打印列表会调用repr,因为列表时机器,直接打印对象会调用str