Django ---- 基础题
一、
1.写出你所知道Djang有关的所有命令(下载、安装等)
- .安装django
- pip install django == 1.11.
- .创建项目
- diangoadmin startproject 项目名
- .启动项目
- cd 项目目录
- python manage.py runserver #127.0.0.1:
- python manage.py runserver
- python manage.py runserver 0.0.0.0:
- .创建App
- python manage.py startapp app01
- .数据库迁移
- python manage.py makemigrations #检查 models.py是否有变化,记录变化
- app01/migrations python manage.py migrate #将变更记录同步到数据库中
2.Django的setting.py中,你用到的配置项有哪些?他们的作用是什么?
- .INSTALLED_APPS 注册App 让Django 程序可以识别新建的App
- .MIDDLEWARE 中间件 自定义中间件注册进来可以执行其中的方法
- .TEMPLATES 模版的相关配置 主要看DIRS 模版的存放路径
- .DATABASES 数据库相关配置 告诉Django连接什么数据库
- .STATIC_URL='/static/' 静态文件的别名, 模版中已别名开头
- .STATICFILES_DIRS = [ #静态文件的具体存放路径 Django会按照
- os.path.join(BASE_DIR,'static')
- ]
3.Django使用Mysql数据库的流程是什么?
- .创建一个mysql数据库
- .settings 中写配置
- DATABASES={
- 'defalut':{
- 'ENGINE':'django.db.backends.mysql',
- "NAME":'library',
- "USER":'root',
- "HOST":'127.0.0.1',
- "PORT":,
- }
- }
- .告诉django使用pymysql的模块连接mysql数据库
- 在与settings 同级的目录下的 __init__.py中写代码:
- import pymysql
- pymysql.install_as_MySQLdb()
- .在app01/models.py中写类(继承models.Model)
- class Publisher(models.Model):
- id = models.AutoField(primary_key = True)
- name = models.CharField(max_length = ,unique = True)
- .数据库迁移的命令
- python manage.py makemigrations
- python ,manage.py migrate
4.ORM是什么?为什么要使用ORM?他的优缺点是什么?他的对应关系是什么?
- .ORM(对象关系映射) 是一种为了解决面向对象与关系型数据库不匹配的技术
- .使用ORM不用在过多得关注SQL语句的编写,而是更加专注于逻辑代码的编写
- .优点:
- .ORM 提供了对数据库的映射,不用直接编写SQL代码, 只需操作对象就能对
- 数据库操作数据
- .让软件开发人员专注于业务逻辑的处理,提高了开发效率
- 缺点:
- .ORM 的缺点是会在一定程度上牺牲程序的执行效率
- .ORM 的操作是有限的, 也就是ORM定义好的操作是可以完成的
- .对应关系
- 类 ----> 数据表
- 对象-----> 数据行
- 属性 -----> 字段
5.定义视图函数的时候要注意什么?
- .函数的第一个参数是request
- .函数必须返回一个HttpRespo nse对象
6.FBV和CBV是什么? 定义一个简单的CBV.
- FBV:函数
- CBV:类
- CBV版:
- class AddClass(View):
- 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/")
7.CBV使用装饰器的方法有哪些,分别是什么?写出简单示例.
- .导入方法装饰器
- from django.utils.decorators import method_decorator
- .方法:
- .给方法上加装饰器
- @method_decorator(wraper)
- def get(self,request,*args,**kwargs)
- return HttpResponse("ok")
- .给dispatch 上加
- @method_decorator(wraper)
- def dispatch(self,request,*args,**kwargs):
- .给类上加
- @method_decorator(wraper,name = 'get')
- class Simple(View)
8.写出你所知道的request对象的方法和属性
- .属性:
- request.method --->请求的方式8种 GET POST PUT DELETE OPTIONS
- request.GET ----> 字典 url上携带的参数
- request.POST ----->字典 form 表单通过POST请求提交的数据
- request.path_info ----->URL 路径 不带参数
- request.body ----->请求体
- request.FILES 上传的文件{}
- .方法:
- request.get_host() ----->主机地址
- request.get_full_path() ----->URL 路径 带参数
9.给视图传参数的方式有哪几种?分别是什么,写出示例.
- 分组:
- url(r'book/([0-9]){4}/([0-9]{2})/$',book,)
- 按照位置参数传递给视图函数
- .命名分组
- url(r"book/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$",book,)
- 按照关键字参数传递给视图函数
- .参数
- url(r"book/(?P<year>[0-9]{4})/(?P<month>[0-9])/$",book,{'year':''})
10.如何在URLconf中给url命名?在视图和模版中如何使用url反向解析?请写出所有情况
- urls.py:
- url(r'^author_list/$',views.author_list,name = 'author_list'),
- url(r'^home/([0-9]{4})/([0-9]{2})/',views.home,name = 'home'),
- url(r'^home/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/',views.home,name = 'home'),
- 视图中反向解析:
- from django.urls import reverse
- reverse("author_list") -----> '/author_list/'
- 无名分组:
- reverse('home',args=('','')) ---->'/home/1999/06/'
- 有名分组:
- reverse('home',kwargs = {'year':'','month':''}) ---->'/home/1998/06/'
- 模板中反向解析:
- {% url 'author_list' %} ---->'/author_list/'
- 无名分组:
- {% url 'home' '' '' %}
- 有名分组:
- {% url 'home' '' '' %}
- {% url 'home' month = '' year = '' %}
11.请写出你所知道的模板语法
- .变量
- {{ 变量名 }}
- . .的用法
- {{ name_list. }} #列表取值
- {{ name_dict.name1 }} #字典取值
- {{ p1.name }} #对象的属性
- {{ p1.sing }} # 对象的方法
- . 过滤器
- {{ 变量名|filter:参数 }}
- .tags
- {% for user in user_list %}
- {{ user.name }}
- {% endfor %}
- {% if 条件 %}
- 操作
- {% endif %}
12.请写出母版和继承的使用方法
- . 创建一个 HTML 文件当做母版 'base.html' ,母版中将多个页面的重复代码提取出来
- . 在母版中定义多个block ,来区分不同页面的不同内容
- .在子页面中继承母版 {% extends 'base.html' %}
- .在block 中写自己页面独特的内容,用来替换模板中block中的内容
13.请写出自定义filter的步骤
- .在app下创建一个名叫 templatetags 的python包 templatetags不能写错
- .在templatetags 里建一个 py文件 myfilters
- .在py文件中编辑:
- from django import template
- register = template.Library() # register 名字不能错
- @register.filter
- def add_sb(value,arg):
- return '{}sb'.format(value)
- @register.filter(name = 'dsd')
- def add_sb(value,arg):
- return '{}sb'.format(value)
- .重启
- .使用filter
- {% load myfilters %}
- {{ name1|dsd:'very' }}
14.cookie 和session 是什么? 为什么要使用它们?
- .cookie
- 定义: cookie是服务器让浏览器保存在浏览器本地的键值对
- 原因: http 是无状态,每次请求之间没有任何关系,无法保存状态. 使用cookie 来保存
- 一些状态
- .session
- 定义: session 是保存在服务器上的键值对,依赖于cookie
- 原因:
- cookie 在浏览器端 不太安全
- cookie 长度受限 session长度不受限
15.Django中操作 cookie 和session 的方法有哪些?
- .cookie
- .设置 cookie
- rep = redirect("/index/")
- rep.set_cookie(key,value,max_age = )
- rep.set_signed_cookie(key,value,max_age = , salt = '')
- .获取 cookie
- request.COOKIES['key']
- request.COOKIES.get('key') --->推荐的取法
- request.get_signed_cookie('key',salt ='')
- .删除 cookie
- rep.delete_cookie('key')
- .session
- .设置session
- request.session['key'] = value
- request.session.setdefault(key,value) ---->存在就不设置
- .获取session
- request.session['key']
- request.session.get(key,'')
- .删除 session
- request.session.pop(key) ----->删除某一个键值对
- del request.session['key']
- request.session.delete() -->删除所有的session 键值对
- request.session.flush() -->删除所有的session 键值对,删除了 cookie
- .设置超时时间
- request.session.set expiry()
- .清除当前过期的 session
- request.session.clear_expired()
16.Django的中间件是什么?请写出 process_request 和process_response 以及process_view三个方法的执行时间、执行顺序和不同返回值不同的流程
- .process_request(self.request)
- 执行时间 :请求来 先执行,在视图之前
- 执行顺序: 按照注册顺序执行
- 返回值:
- 返回值是None 正常往后走
- 返回值是 HttpResponse 对象 后面的不在走, 直接执行当前中间的
- process_response方法
- .process_response(self,request,response)
- 执行时间: 视图函数之后
- 执行顺序:安装注册顺序倒序执行
- 返回值: HttpResponse对象
- .process_view(self,request,view_func,view_args,view_kwargs)
- 执行时间: 在视图之前 ,process_request之后
- 执行顺序: 按照注册顺序 顺序执行
- 返回值:
- None 正常往后走
- HttpResponse 对象 后面的中间件 process_view方法、视图不执行
- 走所有中间的 process_response方法
二、ORM操作
models.py:
1.查询
a) 查找三年级的班级对象
- models.Classes.objects.filter(c_name__startswith='三年')
b)查找三年二班的所有同学的名字
- models.Classes.objects.get(c_name = '三年二班').student_set.all().values('s_name')
c)查询每个班级的名称和的学生人数
- models.Classes.objects.annotate(count = Count('student')).values('c_name','count')
d)查询年纪最大的老师姓名和年龄
- .models.Teacher.objects.order_by('-age').values('t_name','age').first()
- .models.Teacher.objects.filter(age=models.Teacher.objects.aggregate(max=Max('age'))['max']).values('t_name','age')
e)分别查询出男女老师的个数
- models.Teacher.objects.values('sex').annotate(Count('sex'))
f)查询名字中有"灰"的学生姓名和成绩
- models.Student.objects.filter(s_name__contains = '灰').values('s_name','score')
g)查询成绩合格的学生姓名和成绩
- models.Student.objects.filter(score__gte=).values('s_name','score')
2.增加
a)新增一个名为"三年四班"的班级
- models.Classes.objects.create(c_name = '三年四班')
b)给三年二班新增一个名为"小青"的同学
- models.Student.objects.create(s_name = '小青',my_class_id = )
- models.Classes.objects.get(c_name = '三年二班').student_set.create(s_name='小青',score = )
c)新增一个名为"苑局"的30岁的男老师,他教三年三班
3.修改
a)小红转班了,转到了三年四班
b)给所有的学生的成绩都加5分
- from django.db.models import F
- models.Student.objects.update(score = F('score')+)
三、请画出Django请求的生命周期.
Django ---- 基础题的更多相关文章
- 各位大佬Python的第一部分道基础题已经整理好了,希望大家面试的时候能用的上。
Python的第一部分道基础题,希望大家面试的时候能用的上. 1.为什么学习Python? Python是目前市面上,我个人认为是最简洁.最优雅.最有前途.最全能的编程语言,没有之一. 2.通过什么途 ...
- day 70 Django基础五之django模型层(二)多表操作
Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 ORM ...
- Android测试基础题(三)
今天接着给大家带来的是Android测试基础题(三). 需求:定义一个排序的方法,根据用户传入的double类型数组进行排序,并返回排序后的数组 俗话说的好:温故而知新,可以为师矣 packag ...
- Python之路-(js正则表达式、前端页面的模板套用、Django基础)
js正则表达式 前端页面的模板套用 Django基础 js正则表达式: 1.定义正则表达式 /.../ 用于定义正则表达式 /.../g 表示全局匹配 /.../i 表示不区分大小写 /.../m ...
- 小试牛刀3之JavaScript基础题
JavaScript基础题 1.让用户输入两个数字,然后输出相加的结果. *prompt() 方法用于显示可提示用户进行输入的对话框. 语法: prompt(text,defaultText) 说明: ...
- 小试牛刀2:JavaScript基础题
JavaScript基础题 1.网页中有个字符串“我有一个梦想”,使用JavaScript获取该字符串的长度,同时输出字符串最后两个字. 答案: <!DOCTYPE html PUBLIC &q ...
- Django 基础教程
Django 基础教程 这是第一篇 Django 简介 » Django 是由 Python 开发的一个免费的开源网站框架,可以用于快速搭建高性能,优雅的网站! 你一定可以学会,Django 很简单 ...
- HDU 1301 Jungle Roads (最小生成树,基础题,模版解释)——同 poj 1251 Jungle Roads
双向边,基础题,最小生成树 题目 同题目 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include<stri ...
- nyist oj 79 拦截导弹 (动态规划基础题)
拦截导弹 时间限制:3000 ms | 内存限制:65535 KB 难度:3 描写叙述 某国为了防御敌国的导弹突击.发展中一种导弹拦截系统.可是这样的导弹拦截系统有一个缺陷:尽管它的第一发炮弹可以 ...
随机推荐
- PMP模拟考试-2
1. Increasing resources on the critical path activities may not always shorten the length of the pro ...
- Java -- 获取指定接口的所有实现类或获取指定类的所有继承类
Class : ClassUtil package pri.lime.main; import java.io.File; import java.io.IOException; import jav ...
- grid网格的流动定位
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- PowerDesigner导出word,PowerDesigner把表导出到word,PDM导出word文档
PowerDesigner导出word,PowerDesigner把表导出到word,PDM导出word文档 >>>>>>>>>>>& ...
- mysql临时表产生的执行效率问题改进(转)
问题: 近日,线上MySQL查出一个慢sql,每次都要查询1000ms以上,严重影响用户体验 今得空去诊断一番,记录如下: sql原句: SELECT r.object_id AS cardId, c ...
- php扩展AMQP,安装报错解决
接下来来安装php扩展AMQP,安装了它以后,才能用PHP操作rabbitmq.wget https://pecl.php.net/get/amqp-1.4.0.tgztar -zxvf amqp-1 ...
- Ora2Pg的安装和使用
1. 安装DBI,DBD::Oracle DBI只是个抽象层,要实现支持不同的数据库,则需要在DBI之下,编写针对不同数据库的驱动.对MySql来说,有DBD::Mysql, 而对ORACLE来说,则 ...
- Java实现简单的正则表达式匹配
import java.util.regex.Pattern; public class Test_REG { public static void main(String[] args) { //只 ...
- iOS - 截屏,view截图的基本方法
推荐一个第三方好用的框架:SDScreenshotCapture #define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice cur ...
- PHP 搜索分词实现代码
<?php /** * @author: xiaojiang 2014-01-08 * php 建立分词树 * */ class Tree{ public $w = ''; public $su ...