我是一个Django新手在我的第一个项目工作,并有静态文件的问题.
我使用django.contrib.auth两个模板创建了一个简单的auth系统:mysite/templates/index.html和mysite/templates/registration/login.html.我有全局静态内容mysite/static,我希望能够访问所有应用程序呈现的所有模板.
mysite/templates/index.html包含在我访问网址时<img src="{{ STATIC_URL }}pics03.jpg"/>呈现为"static/pics03.jpg"和加载的内容localhost:8000/
mysite/templates/registration/login.html包含当我访问网址时<img src="{{ STATIC_URL }}pics03.jpg"/>也会呈现为"static/pics03.jpg"和不加载的包含"localhost:8000/accounts/login/"
在我的urls.py中,我有:
urlpatterns = patterns('',
url(r'^$', 'mysite.views.home'), # plays index.html template
url(r'^accounts/login/$', 'django.contrib.auth.views.login'),
Run Code Online (Sandbox Code Playgroud)
在我的settings.py中,我有:
PROJECT_DIR = os.path.dirname(__file__)
STATICFILES_DIRS = (
# Put strings here, like "/home/html/static" or "C:/www/django/static".
# Always use forward slashes, even on Windows.
# Don't forget to use absolute paths, not relative paths.
os.path.join(PROJECT_DIR,'static'),
)
STATICFILES_FINDERS = ( …Run Code Online (Sandbox Code Playgroud) 我一直在使用Spring Security 3.2.0.RC1中的新csrf功能,并注意到它似乎不适用于enctype ="multipart/form-data"表单.
我有一个简单的Spring表单:
<%@ taglib prefix="form" uri="http://www.springframework.org/tags/form" %>
...
<form:form action="${pageContext.request.contextPath}/model/create" modelAttribute="myForm" enctype="multipart/form-data">
Run Code Online (Sandbox Code Playgroud)
隐藏的csrf输入正在按预期呈现:
<input type="hidden" value="..." name="_csrf">
Run Code Online (Sandbox Code Playgroud)
但请求未通过csrf检查(如果我删除enctype ="multipart/form-data",它可以正常工作).我找到的唯一方法是将"?_csrf = ..."附加到我的动作网址,这很难看,因为令牌会出现在重定向的地址栏中.有没有人经历过相同/找到一个很好的解决方案?
我是Django的新手,并尝试使用django.contrib.auth.views.loginDjango 1.4 为我的网页构建一个简单的登录系统.我有一个包含以下登录表单的基本模板,然后由我网站上的其他模板页面进行扩展:
<form method="post" action="/accounts/login/">
{% csrf_token %}
<p><label for="id_username">Username:</label> <input id="id_username" type="text" name="username" maxlength="30" /></p>
<p><label for="id_password">Password:</label> <input type="password" name="password" id="id_password" /></p>
<input type="submit" value="Log in" />
<input type="hidden" name="next" value="{{ request.get_full_path }}" />
</form>
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试登录时,我收到以下消息:
"禁止(403)CSRF验证失败.请求中止.失败原因:CSRF令牌丢失或不正确."
来自urls.py的相关摘录:
url(r'^accounts/login/$', 'django.contrib.auth.views.login')
Run Code Online (Sandbox Code Playgroud)
和settings.py:
TEMPLATE_CONTEXT_PROCESSORS = (
'django.core.context_processors.request',
)
.....
INSTALLED_APPS = (
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
)
.....
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
)
Run Code Online (Sandbox Code Playgroud)
有什么建议?
我有一个带有延迟加载的Sites集合的User模型:
@Entity
public class User {
@Id
@GeneratedValue
private Integer id;
@OneToMany(fetch = FetchType.LAZY)
private Set<Site> sites;
...
Run Code Online (Sandbox Code Playgroud)
和我的UserDao中的HQL查询,该查询通过ID加载用户,并且还提取关联的网站:
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Query;
import org.springframework.stereotype.Repository;
@Repository
public class userDaoImpl implements UserDao() {
@Inject
private SessionFactory sessionFactory;
public Session getCurrentSession() {
return sessionFactory.getCurrentSession();
}
public User findByIdFetchSites(final Integer id) {
String queryString = "SELECT user FROM User user LEFT JOIN FETCH user.sites WHERE user.id = :id";
Query qry = getCurrentSession().createQuery(queryString).setInteger("id", id);
return qry.uniqueResult();
}
...
Run Code Online (Sandbox Code Playgroud)
当我运行此Dao方法时,我想测试是否正在与用户一起获取网站。我有一个针对HSQLDB运行的JUnit测试类,如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration({ "classpath:/test-context.xml" …Run Code Online (Sandbox Code Playgroud)