• 零散




    django admin的User_model
    class profileUser(AbstractBaseUser, PermissionsMixin):
    自定义User model 
    添加外键的时候是这样添加的
    department = models.ForeignKey(Department, default=2, verbose_name='单位名称')
    这个需要设置一个字段保持唯一
    USERNAME_FIELD = 'userna'

    组合唯一
    class Meta:
         unique_together = (("username", "department"),)
         db_table='auth_user'            

    显示字段名称
    verbose_name='单位名称'

    定义选择字段
    userType = models.CharField(max_length=2,
    choices=(
    ('gl', '管理员'),
    ('md', '普通用户'),
    ),default='md', verbose_name='用户类型')

    default为默认值
    default=False,

    显示在后台的表名称
    class Meta:
    verbose_name ='单位'
    verbose_name_plural = verbose_name


    关联自身的外键
    departFather = models.ForeignKey('self',blank=True,null=True,default=None,verbose_name='上级单位')
    字段是默认为self
    默认为空blank=True,null=True

    设置带小数点的model
    lat = models.DecimalField(max_digits=15, decimal_places=8, verbose_name='纬度',blank=True,null=True)

    创建字段时间为当前时间
    datejoined = models.DateTimeField(default=timezone.now, verbose_name='创建时间')


    django连接postgresql数据库
    DATABASES = {
    'default': {
    'ENGINE': 'django.db.backends.postgresql_psycopg2',
    'NAME': 'Usermodel',
    'USER':'postgres',
    'PASSWORD':'root',
    }
    }


    url跳转当前app下面的url
    urlpatterns = [
    url(r'^',include('django_admin.urls')),

    urlpatterns = [
    url(r'^admin/login/$', login, name='login'),
    url(r'^admin/django_admin/department/departFind/$', departFind, name='departFind'),

    自定义认证
    class CustomBackend(object):
    """
    Authenticates against settings.AUTH_USER_MODEL.
    """
    #只修改了这个函数
    def authenticate(self, username=None, password=None, department=None,**kwargs):
    UserModel = get_user_model()
    if username is None:
    username = kwargs.get(UserModel.USERNAME_FIELD)
    try:
    user = UserModel.objects.get(Q(username=username) & Q(department__departCode=department))
    if user.check_password(password):
    return user
    except UserModel.DoesNotExist:
    # Run the default password hasher once to reduce the timing
    # difference between an existing and a non-existing user (#20760).
    UserModel().set_password(password)

    修改认证form
    class AuthenticationForm(forms.Form):
    """
    Base class for authenticating users. Extend this to get a form that accepts
    username/password logins.
    """
    username = forms.CharField(max_length=254)
    password = forms.CharField(label=_("Password"), widget=forms.PasswordInput)
    #自定义一个company_form
    department = forms.CharField(max_length=254)
    将修改的认证form更改到页面当中
    # 自定义登录界面
    @deprecate_current_app
    @sensitive_post_parameters()
    @csrf_protect
    @never_cache
    def login(request, template_name='admin/login.html',
    redirect_field_name=REDIRECT_FIELD_NAME,
    authentication_form=AuthenticationForm,
    extra_context=None):


    django数据库当中的复杂查询
    #引入Q进行复杂查询
    from django.db.models import Q

    登录进的第一个界面是否显示相应连接
    def has_module_permission(self, request):

    filter的查询结果为一个list
    profileUser.objects.filter(id=request.user.id)[0].UserIsSuper:

    保存到时候触发事件
    def save_model(self, request, obj, form, change):

    更改保存的password需要
    password=make_password(obj.departCode)

    user 
    @admin.register(profileUser)
    class UserAdmin(admin.ModelAdmin):


    可以直接写出外键就可以显示
    list_display = ('username', 'first_name', 'last_name', 'department', 'is_staff')

    返回需要看到的user
    def get_queryset(self, request):
    qs = self.model._default_manager.get_queryset()
            if profileUser.objects.filter(id=request.user.id)[0].UserIsSuper:
    return qs
    else:
    return qs.filter(Q(department__departclass__level__gte=request.user.department.departclass.level) & Q(department__company=request.user.department.company))

    外键字段过滤
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if not profileUser.objects.filter(id=request.user.id)[0].UserIsSuper:
    if db_field.name == "department":
    kwargs["queryset"] = Department.objects.filter(Q(departclass__level__gte=request.user.department.departclass.level) & Q(company=request.user.department.company))

    return super(UserAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

    返回ajax的json请求
    return HttpResponse(json.dumps(departList))

    可能一些地方需要取消csrf验证
    @csrf_exempt

    得到请求的数据
    company_id = request.POST.get('company_id')
    departclass_id = request.POST.get('departclass_id')
    spdatas =json.loads(request.POST.get('spdatas'))

    查询外键关联字段使用__,条件判断使用__gte等
    department_list = Department.objects.filter(Q(departclass__level__gte=request.user.department.departclass.level) & Q(company=request.user.department.company))

    返回json格式数据
    return HttpResponse(json.dumps(spdatas), content_type="application/json")

    取出的数据要先序列化之后在返回
    department_list = serializers.serialize('json',department_list)
    return render_to_response('sp/create_user.html',{'department_list':json.dumps(department_list),})

    django model 数据库连接查询
    profileUser.objects.create()
    Department.objects.filter()
    Company.objects.all()



    自定义django的admin界面

    可以通过判断路径来控制页面
    {% if '/admin/django_admin/department/add/' in request.path %}
    <a href="/admin/django_admin/department/add/createDepartment/">
    <button style="height: 30px">批量创建单位</button>
    </a>
    {% endif %}




    django加载静态文件
    <script type="text/javascript" src={% static "js/jquery.min.js" %}></script>

    django 取消密码验证
    在setttings里面进行设置
    # Password validation
    # https://docs.djangoproject.com/en/1.9/ref/settings/#auth-password-validators

    # AUTH_PASSWORD_VALIDATORS = [
    # {
    # 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    # },
    # {
    # 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    # },
    # {
    # 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    # },
    # {
    # 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    # },
    # ]








  • 相关阅读:
    《JavaScript和jQuery实战手册(原书第2版)》——2.1节语句
    《JavaScript和jQuery实战手册(原书第2版)》——2.1节语句
    Jenkins ant打包部署
    Jenkins ant打包部署
    Jenkins ant打包部署
    Jenkins ant打包部署
    外媒解读Web安全核心PKI的四大致命问题
    外媒解读Web安全核心PKI的四大致命问题
    “浪子”觉醒,通过养羊创业致富
    在互联网时代,餐饮业将如何突破?
  • 原文地址:https://www.cnblogs.com/wuqingzangyue/p/5749701.html
Copyright © 2020-2023  润新知