目前,我仍在学习 Django 并使用 Django 2.2 创建我的博客。但不知何故,当我使用 django-taggit 时出现错误。
如何通过标签过滤帖子?
我已阅读文档,但没有完全介绍如何将其实现到实际项目中。
这是我的代码:
我尝试了几种不同的方法,仍在 StackOverflow 中搜索,但仍然没有答案。
的结果与 的结果/blog/tag/post-tagged相同/blog。那么我该如何过滤它views.py呢?或者也许来自blog.html?
所以结果/blog/tag/post-tagged仅来自标记的帖子。
这是我的代码:
models.py:
...
from taggit.managers import TaggableManager
"Post Model"
class Post(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
slug = models.SlugField(max_length=100, null=True, blank=True, unique=True)
title = models.CharField(max_length=200)
tags = TaggableManager(blank=True)
...
Run Code Online (Sandbox Code Playgroud)
views.py:
def blogIndex(request):
posts = Post.objects.all().order_by("-created_date")[0:4]
context = {"posts": posts,}
return render(request, 'blog.html', context)
def Tagging(request, slug):
tags = Tag.objects.filter(slug=slug)
posts = Post.objects.all().order_by("-tags") …Run Code Online (Sandbox Code Playgroud) 如果我打开 Starlette/FastAPI WebSocket,如果我从协程外部关闭 WebSocket,当前等待从客户端接收数据的协程会发生什么?是调用receive引发异常还是协程永远留在内存中,因为它永远不会收到任何东西?
from fastapi import FastAPI
from fastapi.websockets import WebSocket
app = FastAPI()
open_sockets = {}
@app.websocket('/connection/')
async def connection(websocket: WebSocket):
await websocket.accept()
id = await websocket.receive_json()['id']
open_sockets[id] = websocket
while True:
data = await websocket.receive_json()
@app.post('/kill/{id}/')
async def kill(id=str):
# What does this do to the above `await websocket.receive_json()`?
await open_sockets[id].close()
del open_sockets[id]
Run Code Online (Sandbox Code Playgroud) 所以我的模型很简单
class Face(models.Model):
uid = models.CharField(max_length=510, primary_key=True)
photo = models.ImageField(upload_to='face_photos')
Run Code Online (Sandbox Code Playgroud)
串行器
class FaceSerializer(serializers.HyperlinkedModelSerializer):
class Meta:
model = Face
fields = ['uid', 'photo']
extra_kwargs = {'uid': {'required': True}, 'photo': {'required': True}}
Run Code Online (Sandbox Code Playgroud)
视图应该是这样的
class FaceViewSet(viewsets.ModelViewSet):
queryset = Face.objects.all()
serializer_class = FaceSerializer
permission_classes = [permissions.AllowAny]
Run Code Online (Sandbox Code Playgroud)
它有效。然而:
uid存在则更新,否则创建......以及其他处理。我如何实现这一切而不失去提供的所有好处viewsets.ModelViewSet,例如验证、Rest API Web 视图中自动生成的 HTML 字段等?
我一直在阅读这篇博文,但我仍然不相信我确切地知道该怎么做以获得自定义错误,我可以从我的函数返回并处理它们之外的错误.
这就是我目前正在做的事情:
func doSomething() int {
x := 0
// Do something with x.
...
if somethingBadHappened {
return -1
}
if somethingElseBadHappened {
return -2
}
return x
}
Run Code Online (Sandbox Code Playgroud)
这就是我想要做的事情:
func doSomething() int, ? {
...
if somethingBadHappened {
return ?, err
}
if somethingElseBadHappened {
return ?, err2
}
return x, nil
}
Run Code Online (Sandbox Code Playgroud)
但我不确定如何以及如何用这些问题取代这些问号.
我有一个非常简单的站点在Flask工作,所有这些都来自一个sqlite数据库.每个页面都作为一行存储在页面表中,其中包含路径,标题,内容等内容.
该结构是分层的,其中页面可以具有父级.因此,例如,'about'可能是一个页面,也可能有'about/something'和'about/cakes'.所以我想创建一个导航栏,其中包含指向父项为"/"(/是根页面)的所有链接的链接.此外,我还希望它还显示打开的页面和该页面的所有父母.
例如,如果我们在'about/cakes/muffins',除了总是显示的链接之外,我们还会看到"about/cakes"的链接,在某种程度上如此:
- About/
- Cakes/
- Muffins
- Genoise
- Pies/
- Stuff/
- Contact
- Legal
- Etc.[/]
Run Code Online (Sandbox Code Playgroud)
带有子项的带有斜杠的斜杠,而没有带有子项的页面则带有斜杠.
码:
@app.route('/')
def index():
page = query_db('select * from page where path = "/"', one=True)
return render_template('page.html', page=page, bread=[''])
@app.route('/<path>')
def page(path=None):
page = query_db('select * from page where path = "%s"' % path, one=True)
bread = Bread(path)
return render_template('page.html', page=page, crumbs=bread.links)
Run Code Online (Sandbox Code Playgroud)
我已经觉得我因为在那里有两个功能而违反DRY.但是导航会进一步违反它,因为我还想在错误页面之类的东西上导航.
但我似乎无法找到一种特别的Flasky方法来做到这一点.有任何想法吗?
楷模:
class Item(models.Model):
name = models.CharField(max_length=100)
# More stuff.
class Sale(models.Model):
sale_date = models.DateField(auto_now_add=True)
item = models.ForeignKey(Item)
# More stuff.
Run Code Online (Sandbox Code Playgroud)
视图:
class TodaySales(ListView):
# Stuff in here.
def get_queryset(self):
sales_today = Sale.objects.filter(sale_date=date.today())
return sales_today.values('item').annotate(Count('item'))
Run Code Online (Sandbox Code Playgroud)
我得到这样的东西:
[{'item': 1, 'item__count': 2}, {'item': 2, 'item__count': 1}]
Run Code Online (Sandbox Code Playgroud)
这很好,但我真正想要的是能够获得有关该项目的额外信息,例如其名称等.但我似乎无法轻易做到这一点,因为我得到的只是项目ID,所以我不能在我的模板中执行,例如,{{item.name}}.
这样做有什么好方法吗?
还有另一个可能相关的问题,但它没有答案,提问者没有澄清任何问题.
因此,当我在postgres中查看大型结果集时,java似乎会破坏.
我正在运行的查询试图获得大约5.5M行.基本上我正在尝试从Postgres db填充Neo4J数据库.
我不打算发布代码,除非有人问我认为这是非常通用的.这是异常输出:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.lang.Class.getDeclaredFields0(Native Method)
at java.lang.Class.privateGetDeclaredFields(Unknown Source)
at java.lang.Class.getDeclaredField(Unknown Source)
at java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl.<init>(Unknown Source)
at java.util.concurrent.atomic.AtomicReferenceFieldUpdater.newUpdater(Unknown Source)
at java.sql.SQLException.<clinit>(Unknown Source)
at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1818)
at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:374)
at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:254)
at sqlToGraph.SqlToGraph.main(SqlToGraph.java:52)
Run Code Online (Sandbox Code Playgroud)
第52行只是查询,如下所示:
rs = st.executeQuery("select player_lo, player_hi, total_hands_lo, total_hands_hi, (pc_lo + pc_hi)/2 as avg_pc from pair");
Run Code Online (Sandbox Code Playgroud)
所以我猜rs越来越大了.我想我可以使用LIMIT和OFFSET并运行程序几百次或让它在一个循环中重置rs,但我宁愿不必.
这有点像:Neo4j OutOfMemory问题
但它已经过时了,据我所知,解决方案显然也是如此.
所以我试图插入大约100K节点与5.5M关系(我实际上减少了我的数据集,所以它现在更像是<100K节点,2.8M关系).
一段时间后,内存耗尽,我得到一个例外:
Exception in thread "GC-Monitor" java.lang.OutOfMemoryError: Java heap space
at java.util.Arrays.copyOfRange(Unknown Source)
at java.lang.String.<init>(Unknown Source)
at java.lang.StringBuilder.toString(Unknown Source)
at org.neo4j.kernel.impl.util.StringLogger$ActualStringLogger.logMessage(StringLogger.java:276)
at org.neo4j.kernel.impl.cache.MeasureDoNothing.run(MeasureDoNothing.java:85)
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
at java.util.LinkedList.addBefore(Unknown Source)
at java.util.LinkedList.add(Unknown Source)
at org.neo4j.kernel.impl.nioneo.store.IdGeneratorImpl.freeId(IdGeneratorImpl.java:291)
at org.neo4j.kernel.impl.nioneo.store.CommonAbstractStore.freeId(CommonAbstractStore.java:382)
at org.neo4j.kernel.impl.nioneo.xa.WriteTransaction.doRollback(WriteTransaction.java:315)
at org.neo4j.kernel.impl.transaction.xaframework.XaTransaction.rollback(XaTransaction.java:278)
at org.neo4j.kernel.impl.transaction.xaframework.XaResourceManager.rollback(XaResourceManager.java:518)
at org.neo4j.kernel.impl.transaction.xaframework.XaResourceHelpImpl.rollback(XaResourceHelpImpl.java:111)
at org.neo4j.kernel.impl.transaction.TransactionImpl.doRollback(TransactionImpl.java:558)
at org.neo4j.kernel.impl.transaction.TxManager.rollback(TxManager.java:610)
at org.neo4j.kernel.impl.transaction.TransactionImpl.rollback(TransactionImpl.java:129)
at org.neo4j.kernel.TopLevelTransaction.finish(TopLevelTransaction.java:119)
at sqlToGraph.SqlToGraph.main(SqlToGraph.java:81)
Run Code Online (Sandbox Code Playgroud)
我已经尝试将-Xmx1500m传递给java,这是我可以传递的限制,因为在它抱怨无法分配堆空间之前.它持续时间明显更长,但仍未完成.
这是(略微编辑)的代码:
/* Postgres query and setup stuff cut */
Transaction tx = graphDb.beginTx();
try {
while …Run Code Online (Sandbox Code Playgroud) 我有一个视图和序列化器:
class UserView(generics.RetrieveUpdateAPIView):
model = get_user_model()
serializer_class = UserProfileSerializer
permission_classes = (permissions.IsAuthenticated,)
def get_object(self, *args, **kwargs):
return self.request.user
class UserImageSerializer(serializers.ModelSerializer):
class Meta:
model = get_user_model()
fields = ('image',)
Run Code Online (Sandbox Code Playgroud)
他们与httpie合作很好:
http -f put localhost:8000/accounts/api/image/ "Authorization: Token mytoken" image@~/Downloads/test.jpg
HTTP/1.0 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Date: Thu, 03 Sep 2015 22:50:33 GMT
Server: WSGIServer/0.2 CPython/3.4.3
Vary: Accept
X-Frame-Options: SAMEORIGIN
{
"image": "http://localhost:8000/media/accounts/user_images/test.jpg"
}
Run Code Online (Sandbox Code Playgroud)
并且我的图片已上传并显示在管理员中.
现在我希望能够使用AJAX上传文件,但显然不想工作:
<form action="http://localhost:8000/accounts/api/image/"
method="put"
enctype="multipart/form-data">
<input name="image" type="file">
<input type="submit">
</form>
<script src="https://code.jquery.com/jquery-2.1.4.min.js"></script> …Run Code Online (Sandbox Code Playgroud) 我不认为这实际上是可行的,但有没有干净整洁的方式来获取使用Django站点地图的分页内容?
例如,我的登录页面上有新闻,而且新闻帖子没有永久链接,使用它们的唯一方法是一次性分页5.
另一部分获得各种类型和其他标准的项目列表.
如果不可能,处理它的最佳方法是什么?不为这些网站地图提供网址?要获得分页页面的第一页?
我最好的想法是,我应该将登录页面作为网址,而不是打扰列表页面,因为它们并不是真正重要的搜索引擎.但如果这是最好的行动方案,我怎样才能从站点地图框架中提供到目标网页的链接?
欢迎任何建议.
所以这是我的表格:
class AvatarUploadForm(forms.Form):
avatar = forms.ImageField(label='Image', help_text='Maximum size: 100x100px')
# Validation stuff down here.
Run Code Online (Sandbox Code Playgroud)
和型号:
class UserProfile(models.Model):
user = models.OneToOneField(User)
post_count = models.IntegerField(default=0)
avatar = models.ImageField(null=True, blank=True, upload_to='images/avatars')
# ...
Run Code Online (Sandbox Code Playgroud)
目前尚未完成的潜在错误观点:
@login_required
def user(request, username):
user = get_object_or_404(User, username=username)
profile = user.profile
if request.user == user:
if request.method == 'POST':
form = AvatarUploadForm(request.POST, request.FILES)
if form.is_valid():
profile.avatar = request.FILES['avatar']
profile.save()
return render_to_response('forum/user.html', {'profile_user': user, 'profile': profile},
context_instance=RequestContext(request))
else:
form = AvatarUploadForm()
return render_to_response('forum/user.html', { 'profile_user': user, 'profile': profile, 'form': form …Run Code Online (Sandbox Code Playgroud) passport.authenticate将发布请求添加到注册路由后,我收到此错误。根据教程,一切看起来都很好,但在添加这行代码后,即使我的家庭路线也无法工作。护照有更新什么的吗?
这是我的 app.js:
require('dotenv').config();
const express=require("express");
const bodyParser=require("body-parser");
const ejs=require("ejs");
const mongoose=require("mongoose");
const session=require("express-session");
const passport=require("passport")
const passportLocalMongoose=require("passport-local-mongoose");
const app=express();
app.use(express.static("public"));
app.set('view engine','ejs');
app.use(bodyParser.urlencoded({extended:true}));
app.use(session({
//js object with these properties
secret:"our little secret",
resave:false,
saveUninitialized:false
}));
app.use(passport.initialize());
app.use(passport.session);
mongoose.connect("mongodb://localhost:27017/userDB",{useNewUrlParser:true, useUnifiedTopology: true,useCreateIndex:true});
//secure way to declare schema
const userSchema=new mongoose.Schema({
email:String,
password:String
});
//used to encrypt password basically this is the complete usage of encrypt package.also accessing environment variable
userSchema.plugin(passportLocalMongoose);
const User=new mongoose.model("User",userSchema);
passport.use(User.createStrategy());
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());
app.get("/",function(req,res){
res.render("home");
});
app.get("/login",function(req,res){ …Run Code Online (Sandbox Code Playgroud)