from __future__ import absolute_import
from collections import OrderedDict
from django.core.exceptions import PermissionDenied, ObjectDoesNotExist
from django.core.paginator import InvalidPage, Paginator
from django.core.urlresolvers import NoReverseMatch
from django.db import models
from django.http import HttpResponseRedirect
from django.template.response import SimpleTemplateResponse, TemplateResponse
from django.utils import six
from django.utils.encoding import force_text, smart_text
from django.utils.html import escape, conditional_escape
from django.utils.safestring import mark_safe
from django.utils.text import capfirst
from django.utils.translation import ugettext as _
from xadmin.util import lookup_field, display_for_field, label_for_field, boolean_icon
from .base import ModelAdminView, filter_hook, inclusion_tag, csrf_protect_m
# List settings
ALL_VAR = 'all'
ORDER_VAR = 'o'
PAGE_VAR = 'p'
TO_FIELD_VAR = 't'
COL_LIST_VAR = '_cols'
ERROR_FLAG = 'e'
DOT = '.'
# Text to display within change-list table cells if the value is blank.
EMPTY_CHANGELIST_VALUE = _('Null')
class FakeMethodField(object):
"""
This class used when a column is an model function, wrap function as a fake field to display in select columns.
"""
def __init__(self, name, verbose_name):
# Initial comm field attrs
self.name = name
self.verbose_name = verbose_name
self.primary_key = False
class ResultRow(dict):
pass
class ResultItem(object):
def __init__(self, field_name, row):
self.classes = []
self.text = ' '
self.wraps = []
self.tag = 'td'
self.tag_attrs = []
self.allow_tags = False
self.btns = []
self.menus = []
self.is_display_link = False
self.row = row
self.field_name = field_name
self.field = None
self.attr = None
self.value = None
@property
def label(self):
text = mark_safe(
self.text) if self.allow_tags else conditional_escape(self.text)
if force_text(text) == '':
text = mark_safe(' ')
for wrap in self.wraps:
text = mark_safe(wrap % text)
return text
@property
def tagattrs(self):
return mark_safe(
'%s%s' % ((self.tag_attrs and ' '.join(self.tag_attrs) or ''),
(self.classes and (' class="%s"' % ' '.join(self.classes)) or '')))
class ResultHeader(ResultItem):
def __init__(self, field_name, row):
super(ResultHeader, self).__init__(field_name, row)
self.tag = 'th'
self.tag_attrs = ['scope="col"']
self.sortable = False
self.allow_tags = True
self.sorted = False
self.ascending = None
self.sort_priority = None
self.url_primary = None
self.url_remove = None
self.url_toggle = None
class ListAdminView(ModelAdminView):
"""
Display models objects view. this class has ordering and simple filter features.
"""
list_display = ('__str__',)
list_display_links = ()
list_display_links_details = False
list_select_related = None
list_per_page = 50
list_max_show_all = 200
list_exclude = ()
search_fields = ()
paginator_class = Paginator
ordering = None
# Change list templates
object_list_template = None
def init_request(self, *args, **kwargs):
if not self.has_view_permission():
raise PermissionDenied
request = self.request
request.session['LIST_QUERY'] = (self.model_info, self.request.META['QUERY_STRING'])
self.pk_attname = self.opts.pk.attname
self.lookup_opts = self.opts
self.list_display = self.get_list_display()
self.list_display_links = self.get_list_display_links()
# Get page number parameters from the query string.
try:
self.page_num = int(request.GET.get(PAGE_VAR, 0))
except ValueError:
self.page_num = 0
# Get params from request
self.show_all = ALL_VAR in request.GET
self.to_field = request.GET.get(TO_FIELD_VAR)
self.params = dict(request.GET.items())
if PAGE_VAR in self.params:
del self.params[PAGE_VAR]
if ERROR_FLAG in self.params:
del self.params[ERROR_FLAG]
@filter_hook
def get_list_display(self):
"""
Return a sequence containing the fields to be displayed on the list.
"""
self.base_list_display = (COL_LIST_VAR in self.request.GET and self.request.GET[COL_LIST_VAR] != "" and \
self.request.GET[COL_LIST_VAR].split('.')) or self.list_display
return list(self.base_list_display)
@filter_hook
def get_list_display_links(self):
"""
Return a sequence containing the fields to be displayed as links
on the changelist. The list_display parameter is the list of fields
returned by get_list_display().
"""
if self.list_display_links or not self.list_display:
return self.list_display_links
else:
# Use only the first item in list_display as link
return list(self.list_display)[:1]
def make_result_list(self):
# Get search parameters from the query string.
self.base_queryset = self.queryset()
self.list_queryset = self.get_list_queryset()
self.ordering_field_columns = self.get_ordering_field_columns()
self.paginator = self.get_paginator()
# Get the number of objects, with admin filters applied.
self.result_count = self.paginator.count
self.can_show_all = self.result_count <= self.list_max_show_all
self.multi_page = self.result_count > self.list_per_page
# Get the list of objects to display on this page.
if (self.show_all and self.can_show_all) or not self.multi_page:
self.result_list = self.list_queryset._clone()
else:
try:
self.result_list = self.paginator.page(
self.page_num + 1).object_list
except InvalidPage:
if ERROR_FLAG in self.request.GET.keys():
return SimpleTemplateResponse('xadmin/views/invalid_setup.html', {
'title': _('Database error'),
})
return HttpResponseRedirect(self.request.path + '?' + ERROR_FLAG + '=1')
self.has_more = self.result_count > (
self.list_per_page * self.page_num + len(self.result_list))
@filter_hook
def get_result_list(self):
return self.make_result_list()
@filter_hook
def post_result_list(self):
return self.make_result_list()
@filter_hook
def get_list_queryset(self):
"""
Get model queryset. The query has been filted and ordered.
"""
# First, get queryset from base class.
queryset = self.queryset()
# Use select_related() if one of the list_display options is a field
# with a relationship and the provided queryset doesn't already have
# select_related defined.
if not queryset.query.select_related:
if self.list_select_related:
queryset = queryset.select_related()
elif self.list_select_related is None:
related_fields = []
for field_name in self.list_display:
try:
field = self.opts.get_field(field_name)
except models.FieldDoesNotExist:
pass
else:
if isinstance(field.rel, models.ManyToOneRel):
related_fields.append(field_name)
if related_fields:
queryset = queryset.select_related(*related_fields)
else:
pass
# Then, set queryset ordering.
queryset = query
没有合适的资源?快使用搜索试试~ 我知道了~
校园二手交易网站,主要为在校大学生提供一个要交易二手物品的展示平台.zip

共694个文件
js:147个
py:120个
html:113个

1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 90 浏览量
2024-04-17
14:44:47
上传
评论
收藏 4.68MB ZIP 举报
温馨提示
项目简介: 本项目是一个专门为在校大学生设计的校园二手交易网站。该网站提供一个展示和交易二手物品的平台,包括教科书、电子产品、生活用品等,旨在促进校园内的资源循环利用,同时为学生提供一个便捷、安全的在线交易环境。 技术框架: 后端开发:使用PHP、Java(Spring Boot)、Python(Django/Flask)等后端技术,处理数据存储、用户认证和业务逻辑。 前端设计:采用HTML, CSS, JavaScript结合Bootstrap或Vue.js框架,创建响应式和用户友好的界面。 数据库管理:使用MySQL或MongoDB数据库,确保数据的安全性和高效访问。 安全措施:实施SSL加密、用户认证和授权机制,保障交易的安全性。
资源推荐
资源详情
资源评论



















收起资源包目录





































































































共 694 条
- 1
- 2
- 3
- 4
- 5
- 6
- 7
资源评论

- #完美解决问题
- #运行顺畅
- #内容详尽
- #全网独家
- #注释完整

AI拉呱
- 粉丝: 2981
- 资源: 5549
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 管家婆辉煌ⅡTOP+1311
- 小程序毕业设计-基于微信小程序的互助学习小程序的设计与实现+ssm(包括源码,数据库,教程).zip
- 小程序毕业设计-基于微信小程序的专利服务系统+ssm(包括源码,数据库,教程).zip
- 小程序毕业设计-基于微信小程序的综合文化信息管理系统+ssm(包括源码,数据库,教程).zip
- 小程序毕业设计-基于微信小程序的自修室预约系统+ssm(包括源码,数据库,教程).zip
- 小程序毕业设计-基于微信小程序的公交信息在线查询系统+ssm(包括源码,数据库,教程).zip
- 管家婆辉煌ⅡTOP+1322
- 小程序毕业设计-基于微信小程序的文章管理系统+ssm(包括源码,数据库,教程).zip
- 小程序毕业设计-基于微信小程序的作品集展示微信小程序+ssm(包括源码,数据库,教程).zip
- 小程序毕业设计-基于微信小程序的购物系统+php(包括源码,数据库,教程).zip
- 基于comsol双温模型下的纯金属与半导体变形几何烧蚀研究:可耦合应力场与流场的数值分析附参考文献默认设置纯金属条件,COMSOL双温模型及其应用:考虑几何变形烧蚀下的纯金属半导体热力行为分析-可耦
- 小程序毕业设计-基于微信小程序的无中介租房系统+ssm(包括源码,数据库,教程).zip
- 小程序毕业设计-基于微信小程序的消防隐患在线举报系统开发+ssm(包括源码,数据库,教程).zip
- 小程序毕业设计-基于微信小程序的绘画学习平台+ssm(包括源码,数据库,教程).zip
- 小程序毕业设计-基于微信小程序的会议发布与预约系统的设计与开发+ssm(包括源码,数据库,教程).zip
- 小程序毕业设计-基于微信小程序的基于h5 移动网赚项目设计与实现+springboot(包括源码,数据库,教程).zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈



安全验证
文档复制为VIP权益,开通VIP直接复制
