我已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)