Django Drf SimpleUI

参考:Django3.2框架 | YUAN

前后端不分离:template, 前后端分离:drf

admin.py 是给后台管理用的,views.py 是给前端调用的。

1 新建Django项目

        cmd 命令:

        django-admin startproject 工程名称

新建Django项目_django 新建项目_星_奕的博客-CSDN博客

2 运行项目 ctrl +f5

      1  命令启动: python manage.py runserver 

      2  pycharm 启动配置

3 创建应用 (模块)

 (一个项目可以包括多个应用,一个应用可被多个项目包含)

        python manage.py startapp 应用名

4 安装django-cors-headers 实现cors

        安装django-cors-headers插件:

  • pip install django-cors-headers

5 添加应用

在settings.py 列表INSTALLED_APPS 里添加应用

INSTALLED_APPS = [

    'django.contrib.admin',

    'django.contrib.auth',

    'django.contrib.contenttypes',

    'django.contrib.sessions',

    'django.contrib.messages',

    'django.contrib.staticfiles',

    # 跨域访问
    'corsheaders',

    'firstApp', # 新建的应用

]

        复制创建应用

        如果已经有了应用,直接复制一份应用文件夹,

1 修改包名。在settings.py 列表INSTALLED_APPS 里添加新应用。在urls.py添加路由。

2 修改apps.py 

        3修改__init__.py 文件

        4 修改models.py,views.py ……

启动项目 

python manage.py runserver ip:端口
或:
python manage.py runserver

创建模板文件

应用目录下创建templates文件夹,文件夹下创建thml文件

views.py 的方法 转换html文件

from django.shortcuts import render

# Create your views here.

def home(request):
    return render(request,"index.html")

路由导入

urls.py

from django.contrib import admin
from django.urls import path
from firstApp.views import home

urlpatterns = [
    path('admin/', admin.site.urls),
    path('',home,name= 'home'), # 自己的路由
]

目录结构

把模式映射到数据库里(数据迁移 建表)

        python manage.py makemigrations
        python manage.py migrate

Django 框架:操作mysql数据库_django映射mysql_南风和云的博客-CSDN博客

创建管理员

python manage.py createsuperuser

路由访问路径

         httpurl->urls.py -> views.py->html文件

django shell

Django Shell 是一个命令行工具,可以在其中运行 Django 代码。可以通过以下步骤在 Django Shell 中启动一个 Python 解释器:

  1. 打开命令行终端。

  2. 进入 Django 项目的根目录。

  3. 运行 python manage.py shell 命令。

这会启动 Django Shell 并显示一个 Python 解释器的提示符。在这个提示符下,您可以执行 Django 相关的代码。

以下是一个 Django Shell 的示例会话:

>>> python manage.py shell

Python 3.8.5 (default, Jan 27 2021, 15:41:15)

[GCC 9.3.0] on linux

Django 3.1.6

Type 'help' for help.

>>> from django.contrib.auth.models import User

>>> my_objects = User.objects.all()

>>> for obj in my_objects:

... print(obj.name)

...

John

Alice

Bob

>>> u= User()

>>>u.password = 'zhangsan'

>>>u.username ='zhangsan'

>>>u.save()

>>> eixt

Django对于MySQL数据库操作

#下面语句会翻译成
insert into app01_userinfo.......
#增加
UserInfo.objects.create(name='张三', password='1001', age='21')
#删除  
 UserInfo.objects.filter(id=3).delete()
#删除
 UserInfo.objects.all().delete()
#获取数据 
UserInfo.objects.all()  #得到是列表(queryset类型)
data_list = UserInfo.objects.all()
for item in data_list:
  item.id,item.name,item.password,item.age

UserInfo.objects.filter(id=3).first() #取queryset得第一行
#更新数据 
UserInfo.objects.all().update(password='1002')
#更新数据  
UserInfo.objects.filter(id='2').update(password='1002')




age = models.IntegerField(null = true) #允许默认值为空。
age = models.IntegerField(defalut = 2) #默认值为2。

断点调试

Django项目的调试_django 打断点调试_hhhhhh-1的博客-CSDN博客

自动生成 requirements 的两种方法

那我们要如何自动生成 requirements.txt 文件,其实有两种方法

第一种 适用于 单虚拟环境的情况: 

pip freeze > requirements.txt

为什么只适用于单虚拟环境?因为这种方式,会将环境中的依赖包全都加入,如果使用的全局环境,则下载的所有包都会在里面,不管是不时当前项目依赖的

当然这种情况并不是我们想要的,当我们使用的是全局环境时,可以使用第二种方法。

第二种方法

第二种 (推荐) 使用 pipreqs ,github 地址为: github.com/bndr/pipreqs

** 安装**

 pip install pipreqs

在当前目录生成

pipreqs . --encoding=utf8--force

注意 --encoding=utf8 为使用 utf8 编码,不然可能会报
UnicodeDecodeError: ‘gbk’ codec can’t decode byte 0xae in position 406: illegal multibyte sequence 的错误。

--force 强制执行,当 生成目录下的 requirements.txt 存在时覆盖。

拉取运行项目

1,pycharm 打开项目 
2,创建虚拟环境
3,安装依赖
pip install -r requirements.txt
4,启动项目
​​​​​​​python manage.py runserver 8000 

 Django事务装饰器

  1. @transaction.atomic:将一个数据库事务限定在一段代码内。如果在事务块内出现异常,Django 会自动回滚事务。如果没有异常,Django 会自动提交事务。
  2. @transaction.non_atomic_requests:在视图函数或类视图上使用,表示在该视图函数或类视图中不使用事务。
  3. @transaction.commit_manually:在事务块内使用,表示在事务块内如果没有出现异常,需要手动调用 transaction.commit() 来提交事务。
  4. @transaction.rollback:在事务块内使用,表示在事务块内如果出现异常,需要手动调用 transaction.rollback() 来回滚事务。

信号触发器

from django.dispatch import receiver

class Resume(models.Model):
    name = models.CharField(max_length=20, verbose_name='姓名')
    email = models.EmailField(max_length=30, verbose_name='邮箱')
    position = models.CharField(max_length=40, verbose_name='申请职位')
    grade_list = (
        (1, '未审'),
        (2, '通过'),
        (3, '未通过'),
    )
    status = models.IntegerField(choices=grade_list,

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = '简历'
        verbose_name_plural = '简历'
        ordering = ('-status', '-publishDate')


@receiver(post_init, sender=Resume)
def before_save_resume(sender, instance, **kwargs):
    instance.__original_status = instance.status


# 信号触发器  监控模型Resume的属性status 是否从1更新为2
@receiver(post_save, sender=Resume)
def post_save_resume(sender, instance, **kwargs):
    email = instance.email  # 应聘者邮箱
    EMAIL_FROM = 'daizikui@qq.com'  # 企业QQ邮箱

    if instance.__original_status == 1 and instance.status == 2:
        print('信号触发器执行成功')
        # 自己的业务

接口缓存

        1,使用数据库表当缓存

        建缓存表

python manage.py createcachetable cache_table_home

       配置缓存 setting.py

#配置缓存表
CACHES = {
    'default': {
        'BACKEND': 'django.core.cache.backends.db.DatabaseCache', # 缓存类型
        'LOCATION': 'cache_table_home',
        'TIMEOUT': 600, # 超时时间 秒
        'OPTIONS': {
            'MAX_ENTRIES': 2000
        }
    }
}

         接口使用缓存

from django.views.decorators.cache import cache_page

# Create your views here.
@cache_page(60 * 15) # 单位:秒数,这里指缓存 15 分钟
def home(request):
    # 新闻展报
    newList = MyNew.objects.all().filter(~Q(
        newType='通知公告')).order_by('-publishDate')
    postList = set()
    postNum = 0
    for s in newList:
        if s.photo:
            postList.add(s)
            postNum += 1
        if postNum == 3:  # 只截取最近的3个展报
            break

    # 新闻列表
    if (len(newList) > 7):
        newList = newList[0:7]

    # 返回结果
    return render(request, 'home.html', {
        'active_menu': 'home',
        'postList': postList,
        'newList': newList,
    })

        2,使用redis缓存

pip install django-redis

# setting.py

CACHES = {
    
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': 'redis://ip:6379', # redis所在服务器ip地址
        "OPTIONS": {
            "CLIENT_CLASS": "django_redis.client.DefaultClient",
             "PASSWORD": "pwd", # redis密码,没有就注释掉
        },
    },
}

django admin管理后台

       1,重写后台页面

        admin.py

@admin.register(C) 
class CAdmin(admin.ModelAdmin):
    list_display = ['id','name','cities','counties']
    list_display_links = ['name']
    search_fields = ['name']
    # list_select_related = [] # 可以多级关联 只能正关联,不能反关联,
    # add_form_template = 'add_template.html' # 方法1 这种方式只能只能修改页面样式,不能传递参数

    # 方法2 这种方式既可以修改默认页面,也可传递参数
    def get_urls(self):
        urls = super().get_urls()
        custom_urls = [
            path('<int:object_id>/change/', self.admin_site.admin_view(self.custom_view), name=urls[4].name)
        ]
        urls[4] = custom_urls[0]
        return urls

    def custom_view(self, request, object_id):
        obj = self.model.objects.get(id=object_id)
        return render(request, 'mytemplate.html',
                      {'model_instance': obj}) 

        mytemplate.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <div id='newApp'>
        <p>id: {{model_instance.id}}</p>
        <p>name: {{model_instance.name}}</p>
    </div>
</body>
</html>
<script>
</script>

        2,后台接口

                

simpleui 快速上手指南

simpleui 快速上手指南_simple ui_暖阳python的博客-CSDN博客

DRF

参考 :DRF | YUAN

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值