我已Django Channels 2.1.2按照教程在Django应用程序中进行了设置,现在需要为新消息设置通知系统。我想以最简单的方式做到这一点。
我可以通过浏览器推送通知来执行此操作,但是我不想那样做。我希望它像Stack Overflow,其中有一个红色的数字代表新消息的实例。
这里的一个答案说
对于通知,您仅需要两个模型:
User和Notification。在连接时,将范围设置为当前经过身份验证的用户。post_save在Notification模型上设置一个 信号,以触发使用方方法向通知对象的用户发送消息。–
我正在竭尽全力去寻找什么样的样子,我已经有了一个User模型,但是没有Notification人。
聊天仅在2个用户之间进行,它不是聊天室,而是更多的聊天线程。2个html模板是inbox.html和thread.html
感谢任何帮助!
我的Django频道代码如下!
users.py
class ChatConsumer(AsyncConsumer):
async def websocket_connect(self, event):
print('connected', event)
other_user = self.scope['url_route']['kwargs']['username']
me = self.scope['user']
#print(other_user, me)
thread_obj = await self.get_thread(me, other_user)
self.thread_obj = thread_obj
chat_room = f"thread_{thread_obj.id}"
self.chat_room = chat_room
# below creates the chatroom
await self.channel_layer.group_add(
chat_room,
self.channel_name
)
await self.send({
"type": "websocket.accept"
})
async def websocket_receive(self, event):
# …Run Code Online (Sandbox Code Playgroud) 我按照另一篇 stackoverflow 帖子完全卸载了 MySQL 的所有实例(我有 5 个..)
$ sudo rm /usr/local/mysql
$ sudo rm -rf /usr/local/mysql*
$ sudo rm -rf /Library/StartupItems/MySQLCOM
$ sudo rm -rf /Library/PreferencePanes/My*
edit /etc/hostconfig and remove the line MYSQLCOM=-YES-
$ rm -rf ~/Library/PreferencePanes/My*
$ sudo rm -rf /Library/Receipts/mysql*
$ sudo rm -rf /Library/Receipts/MySQL*
$ sudo rm -rf /private/var/db/receipts/*mysql*
$ sudo rm -rf /var/db/receipts/com.mysql.mysql*
Run Code Online (Sandbox Code Playgroud)
并重新安装使用
brew install mysql
Run Code Online (Sandbox Code Playgroud)
但是当我启动服务器时,我必须输入旧的 root 用户密码,这意味着它仍然将密码存储在某处。
Brew 提示我更改密码,然后我收到此错误
... Failed! Error: File './mysql/user.MYD' not found (Errcode: 2 - No such file or …Run Code Online (Sandbox Code Playgroud) 我有一个 Django 应用程序,需要按位置过滤用户(显示在登录用户给定距离内的用户)。
现在我能够latitude and longitude使用 HTML5捕获登录用户的坐标并将它们保存到Location我的 SQLite 后端的表中。
我有GeoIP2名单与city和country在我的项目文件夹中,我不知道我该如何使用他们,但他们似乎是一个不错的选择,因为他们采取lat和lon坐标,并产生出一个位置。
我知道这里有几个选项,例如point从lat lon坐标中创建一个值,然后也许可以按半径过滤?等等,5公里,10公里,15公里?
我对所有这些都比较陌生,这就是为什么我要求一个干净的最小解决方案。
我不想使用 PostGres、GIS、GeoDjango。
如果有人使用 Sqlite 和可能的 geoip2 列表有一个简单的解决方案,我将非常感谢您分享它!
模型.py
class Location(models.Model):
latitude = models.DecimalField(max_digits=19, decimal_places=16)
longitude = models.DecimalField(max_digits=19, decimal_places=16)
user = models.OneToOneField(User, on_delete=models.CASCADE, null=False, related_name='loc')
def __str__(self):
return f'{self.user}\'s location'
@login_required
def insert(request):
location = Location(latitude=request.POST['latitude'],
longitude=request.POST['longitude'], user = request.user)
location.save()
return JsonResponse({'message': 'success'})
def location_view(request):
queryset = User.objects.annotate(
radius_sqr=pow(models.F('loc__latitude') -
request.user.loc.latitude, …Run Code Online (Sandbox Code Playgroud) 我正在使用自定义 html 处理我的注册的密码重置区域,因此我覆盖了 Django 的密码重置页面。
重置密码初始链接工作正常并重定向到我的自定义 URL:
/account/reset-password/
Run Code Online (Sandbox Code Playgroud)
用户可以在此处输入他们的电子邮件地址,然后单击“提交”以接收密码重置电子邮件。显示的下一页应该是
/account/reset-password/done/
Run Code Online (Sandbox Code Playgroud)
但是,当他们单击提交时,我可以从命令行看到:
POST /account/reset-password/ HTTP/1.1" 302 0
GET /password_reset/done/ HTTP/1.1" 302 0
GET /account/login/ HTTP/1.1" 200 2237
Run Code Online (Sandbox Code Playgroud)
第二行应该是
/account/reset-password/done/
Run Code Online (Sandbox Code Playgroud)
不是
/password_reset/done/
Run Code Online (Sandbox Code Playgroud)
urls.py
app_name='accounts'
from django.conf.urls import url
from . import views
from django.contrib.auth.views import LoginView, LogoutView, PasswordResetView, PasswordResetDoneView, PasswordResetConfirmView, PasswordResetCompleteView
from django.conf import settings
from django.conf.urls.static import static
urlpatterns = [
url(r'^$', views.home, name='home'),
url(r'^login/$', LoginView.as_view(template_name='accounts/login.html'), name='login'),
url(r'^logout/$', LogoutView.as_view(template_name='accounts/logout.html'), name='logout'),
url(r'^register/$', views.register, name='register'),
url(r'^profile/$', views.view_profile, name='view_profile'),
url(r'^profile/edit$', views.edit_profile, name='edit_profile'),
url(r'^change-password/$', views.change_password, …Run Code Online (Sandbox Code Playgroud)