IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Django编程练习——10道 -> 正文阅读

[Python知识库]Django编程练习——10道

一、如何查看Django版本

命令行cmd -> python

1.>>>import django
     print(django.VERSION)
  (4, 0, 0, 'final', 0)
2.>>> django.get_version()
  4.0'

二、概述{% csrf_token %}的作用

**原因是django为了用户提交表单时防止跨站攻击所做的保护,只需在HTML文件的表单中添加{% csrf_token %}便可以解决问题。
django为用户实现防止跨站请求伪造的功能,通过中间件django.middleware.csrf.CsrfViewMiddleware来完成。
当用post提交数据的时候,django会去检查是否有一个csrf的随机字符串,如果没有就会报错,这也是之前我们一直将其注释的原因。**

全局:django.middleware.csrf.CsrfViewMiddleware
	
局部: @csrf_protect,为当前函数强制设置防跨站请求伪造功能,即便settings中没有设置全局中间件
       @csrf_exempt,取消当前函数防跨站请求伪造功能,即便settings中设置了全局中间件

三、 Hello World 是所有项目入门时都要完成的一个小功能。现在需要你使用 Django 来开发一个网站的首页,这个首页只需要显示 Hello, world! 的字样即可。使用浏览器访问 http://localhost:8000/ 时,返回给浏览器的内容中需要包含 Hello, world! 这个字符串,且 response 的 status code 是 200。

from django.shortcuts import render
from django.http import HttpResponse

# Create your views here.
def index(requset):
     response = HttpResponse('Hello, world!', status = 200)
     return response

四、 实现一个功能,能够统计当前系统中已注册的用户数量,要求返回一个用户数量的数字。

from django.contrib.auth.models import User
from django.http.response import HttpResponse

def index(request):
    # write your code here
    count = User.objects.count()
    return HttpResponse(count)

五、 请完善在 users/services.py 中的方法UserService.get_or_create_user_by_username, 对于一个规定的 username, 如果已经存在一个用户使用了这个 username, 则返回这个用户的 User Object。如果不存在,则使用这个 username 创建一个新的用户,并且返回这个用户的 User Object。

解法一
from django.contrib.auth.models import User
class UserService(object):

    @classmethod
    def get_or_create_user_by_username(cls, username):
        # -- write your code here --
        user, isCreated = User.objects.get_or_create(username = username)
        return user
解法二
from django.contrib.auth.models import User
class UserService(object):

    @classmethod
    def get_or_create_user_by_username(cls, username):
        # -- write your code here --
        try:
            user = User.objects.get(username = username)
        except:
            user = User(username = username)
            user.save()
        return user

六、 这个题是一个 Bug Fix 的训练。我们按照教程 Django Rest Framework Install Tutorial 中的指引来安装 django 和 django-rest-framework 的环境,但是在访问主页http://localhost/ 的django.template.exceptions.的时候,代码抛出这样一个异常
TemplateDoesNotExist: rest_framework/api.html
你能来帮忙 debug 一下修复这个 bug 么?

settings.py

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework'   # 这行是需要添加的代码
]

七、 这道题是一个 Bug Fix 训练,代码里提供了一个 API 用于帮助用户注册账号,但是里面有一些 bug。当我们调用 Signup 的 API 的时候,抛出了如下异常信息
AssertionError: The field 'emial' was declared on serializer SignupSerializer, but has not been included in the 'fields' option.
请你过一下代码并修复所有bugs。

解决该问题主要是查找报错中的‘emial’在我们代码的什么地方,快捷键ctrl+F查找每个代码页,发现该单词在serializers.py中出现

serializers.py

class SignupSerializer(serializers.ModelSerializer):
    username = serializers.CharField(max_length=20, min_length=6)
    password = serializers.CharField(max_length=20, min_length=6)
    email = serializers.EmailField()   # 题目本来的代码为emial

八、 请写一个 Django queryset 用来查询所有教师的信息并按照年龄升序排序。teachers.models.Teacher 作为存储教师信息的 Model。

from teachers.models import Teacher
class TeacherService(object):

    @classmethod
    def get_teachers_order_by_age(cls):
        # -- write your code here --
        return Teacher.objects.all().order_by('age')

order_by(*fields)
默认情况下,QuerySet 返回的结果是按照模型 Meta 中的 ordering 选项给出的排序元组排序的。可以通过使用 order_by 方法在每个 QuerySet 的基础上覆盖这一点。
举例:
Entry.objects.filter(pub_date_year=2005).order_by(‘-pub_date’, ‘headline’)
上述结果将按 pub_date 降序排列,然后按 headline 升序排列。“-pub_date” 前面的负号表示 降序。升序是隐含的。

九、 请写一个 Django queryset 用来查询所有年龄超过n 岁教师的信息。

from django.db.models import QuerySet
from teachers.models import Teacher

class TeacherService(object):

    @classmethod
    def filter_teachers_by_age(cls, age: int) -> QuerySet:
        # -- write your code here --
        # 方法一
   		return Teacher.objects.filter(age__gt = age)

		# 方法二
		qs = Teacher.objects.all()
		return qs.filter(age__gt = age)
Django查找
__gt大于
__gte大于等于
__lt小于
__lte小于等于
__contains模糊查找

十、 请写一个 Django queryset 查询所有邮箱为某个domain邮箱的教师信息。domain取值可以为 qq.com 或者 163.com 等。

from django.db.models import QuerySet
from teachers.models import Teacher

class TeacherService(object):

    @classmethod
    def filter_teachers_by_domain(cls, domain: str) -> QuerySet:  
        # -- write your code here --
    	# 方法一
    	return Teacher.objects.filter(email__endswith='@{}'.format(domain))
        
        # 方法二
        return Teacher.objects.filter(email__endswith=(‘@’+domain))

endswith() 方法用于判断字符串是否以指定后缀结尾,如果以指定后缀结尾返回True,否则返回False。可选参数"start"与"end"为检索字符串的开始与结束位置。

Django判断
+__isnull判断此字段为空
+__startswith判断属性由某字符串开始的行
+__endswith判断属性由某字符串结束的行
+__contains判断属性包含某字符串的行
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 22:49:56  更:2022-07-04 22:52:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 13:03:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码