Django admin参数配置

admin参数配置

一. admin 启动

  admin: Django的后台数据管理的web版本

  针对Food表,url:

    http://127.0.0.1:8000/admin/app02/food/  # 查询页面

    http://127.0.0.1:8000/admin/app02/food/add/  # 增加页面

    http://127.0.0.1:8000/admin/app02/food/1/change/  # 修改页面

    http://127.0.0.1:8000/admin/app02/food/2/delete/  # 删除页面

  

  加载setting中install_app

1 from django.contrib import admin
2 autodiscover_modules('admin')

 

二. 注册

  在app01文件夹下的admin.py中注册models中的类:

1 class BookConfig(admin.ModelAdmin):
2     list_display = ['title', 'price', 'publishDate', 'publish']  # list_display中的字段不能是ManyToManyField.列表中写的都是字段字符串.

   

  设置指定的字段可以点击跳转,默认左侧第一列,可以设置多个字段.list_display_links必须在list_display的后边,不然就会报错.显示查找不到list_display_links中括号中的字段名.

    list_display_links = ['price', 'title']  # 设置指定的字段可以点击跳转,默认左侧第一列,可以设置多个字段.列表中写的都是字段字符串.

  字面上看就可以发现红色框中的字体与右侧两列的不同.

 

  过滤器:

1     list_filter = ['title', 'publish', 'authors']  # 过滤器的过滤条件,列表中写的都是字段字符串.

增加搜索框

列表内的字段为搜索框中输入内容查找时的匹配数据集合,查找时采用模糊匹配,将查到的结果全部显示出来
    search_fields = ['title', 'price']  # 增加搜索框,列表内的字段为搜索框中输入内容查找时的匹配数据集合.列表中写的都是字段字符串.

实际注册的语句,括号中以一个参数填写model中的类名,第二个写的是admin.py中的单独设置的类名.

 1 admin.site.register(Book, BookConfig) # 实际注册的语句,括号中以一个参数填写model中的类名,第二个写的是admin.py中的单独设置类名. 

 当没有设置单独的类名时:

 1 admin.site.register(Food) # 只写一个models中的类名即可. 

源码如下:

def register(self, model_or_iterable, admin_class=None, **options): 

由源码可以看出,当第二个参数没有参数传入时,默认使用None.

批量操作:

1 def patch_init(self, request, queryset):
2     queryset.update(price=0)
3 patch_init.short_description = '价格初始化'
4 actions = [patch_init] # 将上边设置的批量操作添加到下拉菜单中

  queryset为选中的数据集合.

结果如下:

在批量操作下拉菜单中多出一个设置的选项,使用此选项可以进行批量操作.

 

 源码中实现的顺序:

   源码: django.contrib.admin.sites模块

          ↓

 1 class AdminSite(object):
 2 
 3     def __init__(self):
 4         self._registry = {}
 5         
 6     def register(self, model, admin_class = None):
 7         # 设置配置类
 8         if not admin_class:
 9             admin_class = ModelAdmin
10         
11         self._registry[model] = admin_class(model, self)
12 
13 site = AdminSite()

          ↓

  加载每一个app下的admin.py文件:

1 from django.contrib import admin
2 admin.site.register(Book, BookConfig)
3 admin.site.register(Publish)

 

三. 设计url

   1.  知识点

    1. url(r'index/', views.index)  # index不能带括号

    2. url方法的分发

      # 分发

      (二级分发)

1 url(r'test/',([
2     url(r'yuan/',([
3         url(r'aaa/', aaa),
4         url(r'bbb/', bbb),
5         url(r'ccc/', ccc),
6                    ],None, None)),  # 第一个None是app名字,第二个None是名称空间名字,列表中放url.
7 
8     url(r'alex', alex),
9                ], None, None))     

 

 

       针对Food表,url:

        http://127.0.0.1:8000/admin/app02/food/

        http://127.0.0.1:8000/admin/app02/food/add/

        http://127.0.0.1:8000/admin/app02/food/1/change/

        http://127.0.0.1:8000/admin/app02/food/2/delete/

      3. 

1 model._meta.model_name:  # 模型表的名称
2 model._meta.app_label:  # 模型表所在的app的名称

 

 

     config_obj: 某个model的配置类(自定义配置类或者默认配置类)对象

 

  仿照admin实现一个自定义的增删改查的组件

    (1) 启动

 

1 class StarkConfig(AppConfig):
2 
3 name = 'stark'
4 
5 def ready(self):
6     autodiscover_modules('stark')

 

     

    (2) 注册

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Django基础内容:

  Django创建app命名:

 1 python manage.py startapp app01 

  startapp app名字.

 ----------------------------------------------------------------------------------------------------------------------------------

  admin汉化:

    settings.py文件的:

    LANGUAGE_CODE 设置为 ZH-hans.
------------------------------------------------------------------------

字典小知识:
1 x = 'hello'
2 dic = {}
3 dic[x] = 123
4 print(dic)
结果:
1 {'hello': 123}

 --------------------------------------------------------------------------------------------------------------------------------------------------------------------

 ok打印与否?

1 def func():
2     
3     print('ok')
4 
5 l = [1, 2, 3, func()]
6 print(l)

 函数加载过程中,打印ok

结果:

ok
[1, 2, 3, None]

   python是边加载边执行的,当程序加载到列表的最后一个是,就会执行函数func,并将结果返回列表,此函数返回值为None.

-------------------------------------------------------------------------------------------
Django将各个模块放在不同的py文件中只是为了解耦.将所有的文件放在同一个py文件中也是完全可以的.


 

转载于:https://www.cnblogs.com/ZN-225/p/9542857.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django 中,可以使用自定义认证系统来验证用户身份。要实现自定义认证系统,需要以下步骤: 1. 创建用户模型:使用 Django 内置的 User 模型,或者自定义一个用户模型。如果自定义用户模型,需要继承 AbstractBaseUser 类,并实现必要的方法和属性,如 is_authenticated、is_active、get_username 等。 2. 创建认证后端:创建一个类,继承自 django.contrib.auth.backends.BaseBackend 类,并实现 authenticate 和 get_user 方法。authenticate 方法用于验证用户身份,返回一个认证通过的 User 对象;get_user 方法用于获取 User 对象。 3. 配置认证后端:在 settings.py 文件中配置 AUTHENTICATION_BACKENDS 参数,指定使用自定义的认证后端。 4. 创建登录页面和视图函数:在应用中创建登录页面和视图函数,视图函数中使用 authenticate 和 login 函数进行用户身份验证和登录。 下面是一个简单的示例代码: ```python # models.py from django.db import models from django.contrib.auth.models import AbstractBaseUser, BaseUserManager class CustomUserManager(BaseUserManager): def create_user(self, email, password=None, **extra_fields): if not email: raise ValueError('The Email field must be set') email = self.normalize_email(email) user = self.model(email=email, **extra_fields) user.set_password(password) user.save() return user def create_superuser(self, email, password=None, **extra_fields): extra_fields.setdefault('is_staff', True) extra_fields.setdefault('is_superuser', True) return self.create_user(email, password, **extra_fields) class CustomUser(AbstractBaseUser): email = models.EmailField(unique=True) first_name = models.CharField(max_length=30, blank=True) last_name = models.CharField(max_length=30, blank=True) is_active = models.BooleanField(default=True) is_staff = models.BooleanField(default=False) is_superuser = models.BooleanField(default=False) USERNAME_FIELD = 'email' REQUIRED_FIELDS = [] objects = CustomUserManager() def __str__(self): return self.email def has_perm(self, perm, obj=None): return True def has_module_perms(self, app_label): return True @property def is_authenticated(self): return True # backends.py from django.contrib.auth.backends import BaseBackend from .models import CustomUser class CustomBackend(BaseBackend): def authenticate(self, request, email=None, password=None, **kwargs): try: user = CustomUser.objects.get(email=email) if user.check_password(password): return user except CustomUser.DoesNotExist: return None def get_user(self, user_id): try: return CustomUser.objects.get(pk=user_id) except CustomUser.DoesNotExist: return None # settings.py AUTHENTICATION_BACKENDS = ['myapp.backends.CustomBackend'] # views.py from django.shortcuts import render, redirect from django.contrib.auth import authenticate, login def login_view(request): if request.method == 'POST': email = request.POST.get('email') password = request.POST.get('password') user = authenticate(request, email=email, password=password) if user is not None: login(request, user) return redirect('home') else: message = 'Invalid email or password' else: message = '' return render(request, 'login.html', {'message': message}) ``` 这个示例代码实现了一个基本的自定义认证系统。用户模型为 CustomUser,认证后端为 CustomBackend,登录页面和视图函数为 login_view。在 login_view 中,首先通过 authenticate 函数验证用户身份,如果用户身份验证通过,则调用 login 函数进行登录。如果用户身份验证失败,则返回一个错误消息。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值