mirror of
https://github.com/encode/django-rest-framework.git
synced 2025-08-05 04:50:12 +03:00
Merge 2f6e3ac739
into 0951523300
This commit is contained in:
commit
4fd458f625
|
@ -162,6 +162,10 @@ class Field(object):
|
||||||
attrs = {}
|
attrs = {}
|
||||||
if 'id' not in self.widget.attrs:
|
if 'id' not in self.widget.attrs:
|
||||||
attrs['id'] = self._name
|
attrs['id'] = self._name
|
||||||
|
if 'class' not in self.widget.attrs:
|
||||||
|
attrs['class'] = 'form-control'
|
||||||
|
elif attrs['class'].find('form-control') == -1:
|
||||||
|
attrs['class'] += ' form-control'
|
||||||
|
|
||||||
return self.widget.render(self._name, self._value, attrs=attrs)
|
return self.widget.render(self._name, self._value, attrs=attrs)
|
||||||
|
|
||||||
|
|
|
@ -10,12 +10,13 @@ a single block in the template.
|
||||||
background: transparent;
|
background: transparent;
|
||||||
border-top-color: transparent;
|
border-top-color: transparent;
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
|
text-align: right;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar-inverse .brand a {
|
.navbar-inverse .navbar-brand a {
|
||||||
color: #999999;
|
color: #999999;
|
||||||
}
|
}
|
||||||
.navbar-inverse .brand:hover a {
|
.navbar-inverse .navbar-brand:hover a {
|
||||||
color: white;
|
color: white;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
}
|
}
|
||||||
|
@ -29,7 +30,7 @@ a single block in the template.
|
||||||
z-index: 3;
|
z-index: 3;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar .navbar-inner {
|
.navbar-inverse {
|
||||||
background: #2C2C2C;
|
background: #2C2C2C;
|
||||||
color: white;
|
color: white;
|
||||||
border: none;
|
border: none;
|
||||||
|
@ -37,7 +38,7 @@ a single block in the template.
|
||||||
border-radius: 0px;
|
border-radius: 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar .navbar-inner .nav li, .navbar .navbar-inner .nav li a, .navbar .navbar-inner .brand:hover {
|
.navbar .navbar-nav li, .navbar .navbar-nav li a, .navbar .navbar-brand:hover {
|
||||||
color: white;
|
color: white;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,11 +46,11 @@ a single block in the template.
|
||||||
background: #2C2C2C;
|
background: #2C2C2C;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar .navbar-inner .dropdown-menu li a, .navbar .navbar-inner .dropdown-menu li {
|
.navbar .dropdown-menu li a, .navbar .dropdown-menu li {
|
||||||
color: #A30000;
|
color: #A30000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.navbar .navbar-inner .dropdown-menu li a:hover {
|
.navbar .dropdown-menu li a:hover {
|
||||||
background: #EEEEEE;
|
background: #EEEEEE;
|
||||||
color: #C20000;
|
color: #C20000;
|
||||||
}
|
}
|
||||||
|
@ -61,11 +62,6 @@ html {
|
||||||
background: none;
|
background: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
body, .navbar .navbar-inner .container-fluid {
|
|
||||||
max-width: 1150px;
|
|
||||||
margin: 0 auto;
|
|
||||||
}
|
|
||||||
|
|
||||||
body {
|
body {
|
||||||
background: url("../img/grid.png") repeat-x;
|
background: url("../img/grid.png") repeat-x;
|
||||||
background-attachment: fixed;
|
background-attachment: fixed;
|
||||||
|
|
File diff suppressed because one or more lines are too long
|
@ -36,6 +36,10 @@ ul.breadcrumb {
|
||||||
margin: 80px 0 0 0;
|
margin: 80px 0 0 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.container ul.breadcrumb {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
form select, form input, form textarea {
|
form select, form input, form textarea {
|
||||||
width: 90%;
|
width: 90%;
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,22 +26,21 @@
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
{% block body %}
|
{% block body %}
|
||||||
<body class="{% block bodyclass %}{% endblock %} container">
|
<body class="{% block bodyclass %}{% endblock %}">
|
||||||
|
|
||||||
<div class="wrapper">
|
<div class="wrapper">
|
||||||
|
|
||||||
{% block navbar %}
|
{% block navbar %}
|
||||||
<div class="navbar {% block bootstrap_navbar_variant %}navbar-inverse{% endblock %}">
|
<div class="navbar navbar-static-top {% block bootstrap_navbar_variant %}navbar-inverse{% endblock %}">
|
||||||
<div class="navbar-inner">
|
<div class="container">
|
||||||
<div class="container-fluid">
|
|
||||||
<span>
|
<span>
|
||||||
{% block branding %}
|
{% block branding %}
|
||||||
<a class='brand' rel="nofollow" href='http://www.django-rest-framework.org'>
|
<a class='navbar-brand' rel="nofollow" href='http://www.django-rest-framework.org'>
|
||||||
Django REST framework <span class="version">{{ version }}</span>
|
Django REST framework <span class="version">{{ version }}</span>
|
||||||
</a>
|
</a>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
</span>
|
</span>
|
||||||
<ul class="nav pull-right">
|
<ul class="nav navbar-nav pull-right">
|
||||||
{% block userlinks %}
|
{% block userlinks %}
|
||||||
{% if user.is_authenticated %}
|
{% if user.is_authenticated %}
|
||||||
{% optional_logout request user %}
|
{% optional_logout request user %}
|
||||||
|
@ -52,18 +51,21 @@
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
<div class="container">
|
||||||
{% block breadcrumbs %}
|
{% block breadcrumbs %}
|
||||||
<ul class="breadcrumb">
|
<ul class="breadcrumb">
|
||||||
{% for breadcrumb_name, breadcrumb_url in breadcrumblist %}
|
{% for breadcrumb_name, breadcrumb_url in breadcrumblist %}
|
||||||
|
{% if forloop.last %}
|
||||||
|
<li class="active">{{ breadcrumb_name }}</li>
|
||||||
|
{% else %}
|
||||||
<li>
|
<li>
|
||||||
<a href="{{ breadcrumb_url }}" {% if forloop.last %}class="active"{% endif %}>
|
<a href="{{ breadcrumb_url }}">
|
||||||
{{ breadcrumb_name }}
|
{{ breadcrumb_name }}
|
||||||
</a>
|
</a>
|
||||||
{% if not forloop.last %}<span class="divider">›</span>{% endif %}
|
|
||||||
</li>
|
</li>
|
||||||
|
{% endif %}
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -238,6 +240,7 @@
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
<!-- END Content -->
|
<!-- END Content -->
|
||||||
|
</div><!-- /.container -->
|
||||||
|
|
||||||
<footer>
|
<footer>
|
||||||
{% block footer %}
|
{% block footer %}
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
{{ form.non_field_errors }}
|
{{ form.non_field_errors }}
|
||||||
{% for field in form.fields.values %}
|
{% for field in form.fields.values %}
|
||||||
{% if not field.read_only %}
|
{% if not field.read_only %}
|
||||||
<div class="control-group {% if field.errors %}error{% endif %}">
|
<div class="form-group {% if field.errors %}has-error{% endif %}">
|
||||||
{{ field.label_tag|add_class:"control-label" }}
|
{{ field.label_tag|add_class:"control-label col-md-3" }}
|
||||||
<div class="controls">
|
<div class="controls col-md-9">
|
||||||
{{ field.widget_html }}
|
{{ field.widget_html }}
|
||||||
{% if field.help_text %}<span class="help-block">{{ field.help_text }}</span>{% endif %}
|
{% if field.help_text %}<span class="help-block">{{ field.help_text }}</span>{% endif %}
|
||||||
{% for error in field.errors %}<span class="help-block">{{ error }}</span>{% endfor %}
|
{% for error in field.errors %}<span class="help-block">{{ error }}</span>{% endfor %}
|
||||||
|
|
|
@ -7,62 +7,39 @@
|
||||||
<body class="container">
|
<body class="container">
|
||||||
|
|
||||||
<div class="container-fluid" style="margin-top: 30px">
|
<div class="container-fluid" style="margin-top: 30px">
|
||||||
<div class="row-fluid">
|
<div class="row">
|
||||||
<div class="well" style="width: 320px; margin-left: auto; margin-right: auto">
|
<div class="well" style="width: 320px; margin-left: auto; margin-right: auto">
|
||||||
<div class="row-fluid">
|
<div class="row">
|
||||||
<div>
|
<div>
|
||||||
{% block branding %}<h3 style="margin: 0 0 20px;">Django REST framework</h3>{% endblock %}
|
{% block branding %}<h3 style="margin: 0 0 20px;">Django REST framework</h3>{% endblock %}
|
||||||
</div>
|
</div>
|
||||||
</div><!-- /row fluid -->
|
</div><!-- /row fluid -->
|
||||||
|
|
||||||
<div class="row-fluid">
|
<div class="row">
|
||||||
<div>
|
<div>
|
||||||
<form action="{% url 'rest_framework:login' %}" role="form" method="post">
|
<form action="{% url 'rest_framework:login' %}" class=" form-inline" method="post">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
<div id="div_id_username"
|
<div id="div_id_username" class="clearfix form-group">
|
||||||
class="clearfix control-group {% if form.username.errors %}error{% endif %}">
|
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
<Label class="span4">Username:</label>
|
<Label class="col-md-4">Username:</label>
|
||||||
<input style="height: 25px" type="text" name="username" maxlength="100"
|
<input style="height: 25px" type="text" name="username" maxlength="100" autocapitalize="off" autocorrect="off" class="textinput textInput" id="id_username">
|
||||||
autocapitalize="off"
|
|
||||||
autocorrect="off" class="span12 textinput textInput"
|
|
||||||
id="id_username" required
|
|
||||||
{% if form.username.value %}value="{{ form.username.value }}"{% endif %}>
|
|
||||||
{% if form.username.errors %}
|
|
||||||
<p class="text-error">
|
|
||||||
{{ form.username.errors|striptags }}
|
|
||||||
</p>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div id="div_id_password"
|
<div id="div_id_password" class="clearfix form-group">
|
||||||
class="clearfix control-group {% if form.password.errors %}error{% endif %}">
|
|
||||||
<div class="controls">
|
<div class="controls">
|
||||||
<Label class="span4">Password:</label>
|
<Label class="col-md-4">Password:</label>
|
||||||
<input style="height: 25px" type="password" name="password" maxlength="100"
|
<input style="height: 25px" type="password" name="password" maxlength="100" autocapitalize="off" autocorrect="off" class="textinput textInput" id="id_password">
|
||||||
autocapitalize="off" autocorrect="off" class="span12 textinput textInput"
|
|
||||||
id="id_password" required>
|
|
||||||
{% if form.password.errors %}
|
|
||||||
<p class="text-error">
|
|
||||||
{{ form.password.errors|striptags }}
|
|
||||||
</p>
|
|
||||||
{% endif %}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<input type="hidden" name="next" value="{{ next }}" />
|
<input type="hidden" name="next" value="{{ next }}" />
|
||||||
{% if form.non_field_errors %}
|
|
||||||
{% for error in form.non_field_errors %}
|
|
||||||
<div class="well well-small text-error" style="border: none">{{ error }}</div>
|
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
|
||||||
<div class="form-actions-no-box">
|
<div class="form-actions-no-box">
|
||||||
<input type="submit" name="submit" value="Log in" class="btn btn-primary" id="submit-id-submit">
|
<input type="submit" name="submit" value="Log in" class="btn btn-primary" id="submit-id-submit">
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div><!-- /.row-fluid -->
|
</div><!-- /.row -->
|
||||||
</div><!--/.well-->
|
</div><!--/.well-->
|
||||||
</div><!-- /.row-fluid -->
|
</div><!-- /.row -->
|
||||||
</div><!-- /.container-fluid -->
|
</div><!-- /.container-fluid -->
|
||||||
</body>
|
</body>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
|
@ -2,9 +2,9 @@
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{{ form.non_field_errors }}
|
{{ form.non_field_errors }}
|
||||||
{% for field in form %}
|
{% for field in form %}
|
||||||
<div class="control-group">
|
<div class="form-group">
|
||||||
{{ field.label_tag|add_class:"control-label" }}
|
{{ field.label_tag|add_class:"control-label col-md-3" }}
|
||||||
<div class="controls">
|
<div class="controls col-md-9">
|
||||||
{{ field }}
|
{{ field }}
|
||||||
<span class="help-block">{{ field.help_text }}</span>
|
<span class="help-block">{{ field.help_text }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -142,7 +142,7 @@ class SessionAuthTests(TestCase):
|
||||||
cf. [#1810](https://github.com/tomchristie/django-rest-framework/pull/1810)
|
cf. [#1810](https://github.com/tomchristie/django-rest-framework/pull/1810)
|
||||||
"""
|
"""
|
||||||
response = self.csrf_client.get('/auth/login/')
|
response = self.csrf_client.get('/auth/login/')
|
||||||
self.assertContains(response, '<Label class="span4">Username:</label>')
|
self.assertContains(response, '<Label class="col-md-4">Username:</label>')
|
||||||
|
|
||||||
def test_post_form_session_auth_failing_csrf(self):
|
def test_post_form_session_auth_failing_csrf(self):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue
Block a user