Django(复习篇)

项目创建
1. 虚拟环境
python -m venv my_env
​
cd my_env
activate/deactivate
​
pip install django
​

2. 项目和app创建
cd mypros
django-admin startproject Pro1
django-admin startapp app1
​

3. settings配置
    INSTALLED_APPS【app1"】
    TEMPLATES【 'DIRS': [os.path.join(BASE_DIR,"templates")]】
    LANGUAGE_CODE = 'zh-hans'
    TIME_ZONE = 'Asia/Shanghai'
MVT Demo
urls --> app.views --> templates/test.html
​
### urls.py 
from app1.views import test1
urlpatterns = [
    ...,
    path("/test1",test1)
]
​

### app1.views.py
def test1(request):
    return render(request,"app1/test1.html",context={"msg":"hello world"})
​

### templates/test1.html
# TEMPLATES【 'DIRS': [os.path.join(BASE_DIR,"templates")]】
# "app1/test1.html"
new >> Pro1/templates
new >> Pro1/templates/app1/test1.html
{{ msg  }}

ORM
### install mysql dependency
pip install mysqlclient 【recommend】
pip install pymysql【
    app/__init__.py:
    import pymysql
    pymysql.install_as_MySQLdb()
】
​

### settings.py
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        "NAME":"test1",
        "HOST":"localhost"
        "PORT":3306,
        "USER":"root",
        "PASSWORD":"root",
    }
}
​

### mysql
mysql -uroot -proot
show databases;
create database test1;
​

### orm
class Users(models.Model):
    # id 自动生成
    name = models.CharField(max_length=255,verbose_name="用户名")
    age = models.IntegerField(verbose_name="用户年龄")

class Account(models.Model):
    KIND_CHOICE = (
        (1,"普通用户"),
        (2,"VIP用户"),
    )
    # id 自动生成
    balance = models.DecimalField(max_digits=10,decimal_places=2,verbose_name="账户余额")
    kind = models.IntegerField(choices=KIND_CHOICE,verbose_name="账户类型")
    user = models.ForeignKey(to="app1.Users",verbose_name="账户用户名",on_delete=models.CASCADE)
​

### migrate
python manage.py makemigrations
python manage.py migrate

Admin Manger
### simple register model(admin.py)
from django.contrib import admin
from .models import Users,Account
admin.site.register(Users)
admin.site.register(Account)
​

### create super user: admin manage-user(Terminal)
python manage.py createsuperuser


### admin page show:verbose_name(models.py)
class Users(models.Model):
    class Meta:
        verbose_name = verbose_name_plural = "用户"
    pass
    
class Account(models.Model):
    class Meta:
        verbose_name = verbose_name_plural = "用户账户"
    pass
 
### admin page show: list_display(admin.py)
# @admin.register(Users)
class UsersAdmin(admin.ModelAdmin):
    list_display = ("id","name","age")
​
@admin.register(Account)
class AccountAdmin(admin.ModelAdmin):
    list_display = ("id","user","balance","kind")
    
# admin.site.register(Users)
# admin.site.register(Account)
admin.site.register(Users,UsersAdmin)

### admin page show: app verbose name(apps.py)
class App1Config(AppConfig):
    verbose_name = "我的应用1"
    pass

 

### admin page show:model object str name
class Users(models.Model):
    def __str__(self):
        return "%s"%(self.name)
    pass
​
class Account(models.Model):
    def __str__(self):
        return "%s账户"%(self.user.name)
    pass

### admin page show:records ordering(admin.py)
class UsersAdmin(admin.ModelAdmin):
    ordering = ["id"]   # ordering = ["-id"]
    pass

### admin page show:fieldsets of add form(admin.py)
class AccountAdmin(admin.ModelAdmin):
    fieldsets = (
        ("账户信息", {
            "description":"请输入用户信息",
            "fields":("kind","balance")
        }),
        ("所有者",{
            "description": "请输入用户所有者",
            "fields":("user",)
        })
    )

 

### admin page show:search fields(admin.py)
search_fields = ["name"]
 
### admin page show:Tabular inline Edit(admin.py)
class AccountInline(admin.TabularInline):
    extra = 1
    model = Account
​
class UsersAdmin(admin.ModelAdmin):
    inlines = [AccountInline,]
 
### admin page show:custom css style (admin.py)
# settings.py
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, 'static')]
​
# admin.py
class UsersAdmin(admin.ModelAdmin):
    class Media:
        css = {
            "all": ("/static/css/admin/admin_user.css",),
        }
    pass

Template
{{ msg }}
{{ user.name }}
​
{% csrf_token %}
​
{% for user in users %}
    {% if user.age > 18 %}
        <p>adult</p>
    {% else %}
        <p>minor</p>
    {% endif %}
{% end for %}
​
{% for key,value in dict.items %}
    <p>{{ key }}:{{ value }}</p>
{% endfor %}
​
{{ data | default:"<p style='color:red'>还没有任何数据哦</p>" }}
{{ content | slice:":20" }}
{{ getDate | date:"Y/m/d" }}

{% extends "base.html" %}

{% block main %}
{% endblock %}
URL
### re_path:query_param、named-group
from django.urls import path,re_path
urlpatterns = [
    path("index",test,name="index"),
    re_path(r"^app1/(?P<page>[1-9]+)$",test1),
]
def test(request):
    # localhost:8000/index?name=joden&age=20
    print(request.GET.dict)
    print(request.GET.get("name"))
    
def test1(request,page):
    # re_path page group => param: page  
    print("page:",page)
    print(request.GET.dict())
​
​
    
### url name
re_path(r'app1/(?P<page>[1-9]+)$', test1, name="index"),
​
def test(request):
    print(reverse("index",kwargs={"page":2}))
​
    
### url namespace
from django.urls import include
path("app1",include("app1.urls"))
# app1/urls.py
app_name = "app1" 
re_path(r'page/(?P<page>[1-9]+)$', test1, name="index"),
# views.py
reverse("app1:index",kwargs={"page":2}) 
CBV
CBV:Class Basic View
https://docs.djangoproject.com/zh-hans/4.1/ref/class-based-views/
    
### View
from django.view import View
class TestView(View):
    def get(self,request,*args,**kwargs):
        return render(request,"app1/test1.html")
    def post(self,request,*args,**kwargs):
        pass
    
urlpatterns = [
    path("app",TestView.as_view()),
]
    
    
### TemplateView
from django.views.generic.base import TemplateView
class TestTemplateView(TemplateView):
    tempate_name = "app1/test1.html"
    def get_context_data(self,**kwargs):
        super().get_context_data(self,**kwargs)
        context = {
            "users":Users.objects.all(),
        }
        return context
​
​
### ListView
from django.views.generic.list import ListView
class TestListView(ListView):
    template_name = "app1/test1.html"
    model = User
    paginate_by = 2     # 3 user/per page
    def get_context_data(self,**kwargs):
        context = super().get_context_data(self,**kwargs)
        print(self.get_paginator(self.object_list,self.paginate_by).num_pages)
        return context
    
{% for user in object_list %}
{% endfor %}

Cookie and Session
### cookie
class TestListView(ListView):
    def get(self,request,*args,**kwargs):
        # get cookie(request)
        request.get_cookie("name")
        response = super(TestListView, self).get(*args,**kwargs)
        # set cookie(response)
        response.set_cookie("name","joden")
        return response
​
    
    
### session
class TestListView(ListView):
    def get(self,request,*args,**kwargs):
        # get session
        get_session_name = request.session.get("sname","")
        # set session
        request.session["sname"] = "value"
        return super(TestListView, self).get(*args,**kwargs)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/136744.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

双11终极官方战报 凯迪仕智能锁全网全渠道第一 持续领跑智能锁行业

一年一度双11狂欢盛典暂时落下帷幕&#xff0c;作为下半年最大的电商购物节&#xff0c;本次双11电商平台借机推出优惠券、补贴、折扣等促销活动&#xff0c;激发消费者购物热情。其中&#xff0c;智能门锁等智能家居产品更是取得了亮眼的成交。 据悉&#xff0c;凯迪仕智能锁双…

【Linux】 mdir命令使用

mdir 为mtools工具指令&#xff0c;模拟MS-DOS的dir指令&#xff0c;可显示MS-DOS文件系统中的目录内容。 语法 mdir [参数][目录] mdir命令 -Linux手册页 命令选项及作用 执行令 mdir--help 执行命令结果 参数 -a  显示隐藏文件。-f  不显示磁盘所剩余的可用空间。-w…

【C语言】函数的系统化精讲(三)

文章目录 一、递归举例二、递归举例2.1求n的阶乘2.2 顺序打印⼀个整数的每⼀位 三、递归与迭代3.1递归的思考3.2求第n个斐波那契数 总结 一、递归举例 .通过上回&#xff08;【C语言】函数的系统化精讲&#xff08;二&#xff09;&#xff09;我们了解到递归的限制条件&#x…

Java终端模式小尝试

Java终端模式小尝试 1、IDE中终端1.1 拉去代码 jediterm1.2 IDE调用系统终端 2、待续~~ 1、IDE中终端 终端_Intellij IDEA、Terminal emulator | pycharm Documentation JetBrains jediterm WindTerm&#xff1a;新一代开源免费的终端工具&#xff0c;GitHub星标6.6k&#xff…

冒泡排序

贵阳这个地方的天气变化好大呀&#xff0c;前两天晒大太阳&#xff0c;今天就冷的脚抖&#xff0c;简直不要太冷&#xff0c;但是不管怎么样&#xff0c;还是要学习的哟&#xff01; 冬天来了&#xff0c;春天确实还有一点远&#xff01; 好了&#xff0c;话不多说&#xff0c;…

linux_day03

1、复习 遇到虚拟机异常退出&#xff0c;会生成配置文件&#xff0c;不确定文件以后是不是还要用的情况下&#xff0c;先改文件名&#xff0c;再启动虚拟机&#xff1b; 2、磁盘相关命令&#xff1a; df&#xff08;disk full&#xff09;&#xff1a;查看磁盘整体状况 -h &…

ztree结合hmap使用经验分享

项目背景 在建德封控拦截系统&#xff08;Vue3antd2.x&#xff09;为追求更快的地图初始化体验&#xff0c;在尝试了hmap2.5.0版本以及2.6.3版本后&#xff0c;由于这两个版本在现场电脑的初始化速度不够流畅&#xff0c;最终使用的是hmap2.1.3版本。同时由于布控选设备&#…

2023年【起重机械指挥】考试试卷及起重机械指挥操作证考试

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年起重机械指挥考试试卷为正在备考起重机械指挥操作证的学员准备的理论考试专题&#xff0c;每个月更新的起重机械指挥操作证考试祝您顺利通过起重机械指挥考试。 1、【多选题】《中华人民共和国特种设备安全法》…

在CMake中打印日志信息

message([STATUS|WARNING|AUTHOR_WARNING|FATAL_ERROR|SEND_ERROR] "message to display" ...) (无) &#xff1a;重要消息 STATUS &#xff1a;非重要消息 WARNING&#xff1a;CMake 警告, 会继续执行 AUTHOR_WARNING&#xff1a;CMake 警告 (dev), 会继续执行 SEN…

【hacker送书第一期】嵌入式虚拟化技术与应用

第一期图书推荐 前言为什么嵌入式系统需要虚拟化技术&#xff1f;专家推荐本书适用群体内容简介目录权威作者团队参与方式 前言 随着物联网设备的爆炸式增长和万物互联应用的快速发展&#xff0c;虚拟化技术在嵌入式系统上受到了业界越来越多的关注、重视和实际应用。嵌入式系…

云端部署ChatGLM-6B

大模型这里更新是挺快的&#xff0c;我参考的视频教程就和我这个稍微有些不一样&#xff0c;这距离教程发布只过去4天而已… 不过基本操作也差不多 AutoDL算力云&#xff1a;https://www.autodl.com/home ChatGLM3&#xff1a;https://github.com/THUDM/ChatGLM3/tree/main Hug…

消息队列之初识Rabbit及安装

文章目录 一、MQ的相关概念1.什么是MQ&#xff1f;2.为什么要用MQ2.1流量消峰2.2应用解耦2.3异步处理 3.MQ 的分类3.1.ActiveMQ3.2.Kafka3.3.RocketMQ3.4.RabbitMQ 4.MQ 的选择4.1.Kafka4.2.RocketMQ4.3.RabbitMQ 二、RabbitMQ的相关概念1.四大核心概念2.RabbitMQ 核心部分3.Ra…

OpenMMlab导出yolov3的onnx模型并推理

手动导出 直接使用脚本 import torch from mmdet.apis import init_detector, inference_detectorconfig_file ./configs/yolo/yolov3_mobilenetv2_8xb24-ms-416-300e_coco.py checkpoint_file yolov3_mobilenetv2_mstrain-416_300e_coco_20210718_010823-f68a07b3.pth mod…

数据结构-堆和二叉树

目录 1.树的概念及结构 1.1 树的相关概念 1.2 树的概念 1.3 树的表示 1.4 树在实际中的应用&#xff08;表示文件系统的目录树结构&#xff09; 2.二叉树的概念及结构 2.1 概念 2.2 特殊的二叉树 2.3 二叉树的存储 3.堆的概念及结构 4.堆的实现 初始化堆 堆的插入…

仿写知乎日报第四周

本周主要修改了以往的一些bug&#xff0c;实现了一些遗漏的新功能。 无限右滑 无限右滑我听了学长的思路&#xff0c;首先在scrollView的画布大小设置多一个宽度的画布&#xff0c;然后每当滑到那个画布的时候&#xff0c;就调用一个通知&#xff0c;该通知会触发在首页的vie…

【 第十三章】软件设计师 之 面向对象程序设计

文章底部有个人公众号&#xff1a;热爱技术的小郑。主要分享开发知识、学习资料、毕业设计指导等。有兴趣的可以关注一下。为何分享&#xff1f; 踩过的坑没必要让别人在再踩&#xff0c;自己复盘也能加深记忆。利己利人、所谓双赢。 备考资料导航 软考好处&#xff1a;软考的…

有效的字母异位词

给定两个字符串 s 和 t &#xff0c;编写一个函数来判断 t 是否是 s 的字母异位词。 注意&#xff1a;若 s 和 t 中每个字符出现的次数都相同&#xff0c;则称 s 和 t 互为字母异位词。 示例 1: 输入: s “anagram”, t “nagaram” 输出: true 示例 2: 输入: s “rat”, …

k8s笔记资源限制,亲和和性 污点和容忍

镜像下载失败 当宿主机资源不足时&#xff0c;会把pod kill &#xff0c;在其他node 重建 在宿主机放可能多的资源 requests(请求) limits(限制) 超出百分比 容器 pod namespace级别 pod使用资源过多&#xff0c;导致宿主机资源不足&#xff0c;会导致重建pod cpu 内存限…

【设计原则篇】聊聊单一职责原则

因为是刚开始写软件设计相关的文章&#xff0c;这里先大概介绍下&#xff0c;软件设计相关的知识图谱。大概分类的话&#xff0c; 编程范式 软件设计相关原则 Don’t Repeat Yourself (DRY)Keep It Simple, Stupid(KISS)Program to an interface, not an implementationYou Ai…

深入理解JVM虚拟机第二十四篇:详解JVM当中的动态链接和常量池的作用

大神链接&#xff1a;作者有幸结识技术大神孙哥为好友&#xff0c;获益匪浅。现在把孙哥视频分享给大家。 孙哥链接&#xff1a;孙哥个人主页 作者简介&#xff1a;一个颜值99分&#xff0c;只比孙哥差一点的程序员 本专栏简介&#xff1a;话不多说&#xff0c;让我们一起干翻J…