在CBV的工作方式中 用户登录的判定可以使用一个装饰器
login_required可以使用在view中的某个视图函数上面一行
@login_required
也可以在url页面这样使用
url(r'^savetest$', login_required(savenowtime)),
需要注意的是 用这个装饰器 需要在setting中做配置
LOGIN_URL = '/login/'
如果是类视图,应该多是类视图,可以直接继承LoginRequiredMixin
或者在url中使用login_required也是可以的
url应该是这样的
url('r^
url/$',
classname.as_view(),name='
urlname'),
红字处都是需要改的
template中使这样使用的
<a href='{% url '
urlname'%}'></a>
写死在template中是很糟糕的做法 一定要避免
如果你的url需要传值
分为两种情况
固定位置和关键词,在最普通的情况下使用固定位置,在稍复杂的情况下使用关键词
url(r'^
url/(?P<pk>[0-9]+)/$',
classname.as_view(), name='
urlname'),
template中的url要这样写
<a href='{% url '
urlname' pk%}'><a/>
这里面的PK是个约定的名字,如果需要修改在类中需要做同样的修改
{%url 'add' %}?a=2&b=3
URL可以通过named group方式传递指定参数,语法为: (?P<name>pattern), name 可以理解为所要传递的参数的名称,pattern代表所要匹配的模式。
例如,
url(r'^articles/(?P<year>[0-9]{4})/(?P<month>[0-9]{2})/$', views.month_archive),
那么year,month将会对应views传递过来的year,month的值,而后面紧跟的则代表正则表达匹配的模式。
下面这个blog说明的很详细
在使用Mixin时传值
class NowTImeMixin(object):
def get_context_data(self, **kwargs):
context = super(NowTImeMixin, self).get_context_data(**kwargs)
context['author'] = Author.objects.all()
context['book'] = Book.objects.all()
context['req] = self.request #这个request可以在这里取到 用来做一些逻辑判断
# 页面中可以直接使用request 不需要上面这句也是可以的
return context
这里注意 这个context为dict,以键值对取值,在分析过各个页面所需的数据之后应该提取其中的共性数据,而共性数据需要做一些筛选的时候在 这个类的def中做逻辑判断