小编Tri*_*lla的帖子

新的聊天消息通知Django频道

我已Django Channels 2.1.2按照教程在Django应用程序中进行了设置,现在需要为新消息设置通知系统。我想以最简单的方式做到这一点。

我可以通过浏览器推送通知来执行此操作,但是我不想那样做。我希望它像Stack Overflow,其中有一个红色的数字代表新消息的实例。

这里的一个答案说

对于通知,您仅需要两个模型:UserNotification。在连接时,将范围设置为当前经过身份验证的用户。post_saveNotification模型上设置一个 信号,以触​​发使用方方法向通知对象的用户发送消息。–

我正在竭尽全力去寻找什么样的样子,我已经有了一个User模型,但是没有Notification人。

聊天仅在2个用户之间进行,它不是聊天室,而是更多的聊天线程。2个html模板是inbox.htmlthread.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)

python django django-models django-views django-channels

9
推荐指数
1
解决办法
1576
查看次数

如何在MacOS上完全卸载MySQL

我按照另一篇 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)

mysql homebrew

5
推荐指数
1
解决办法
1万
查看次数

仅使用 Sqlite(无 GeoDjango、PostGres、MySQL、GIS)按距离进行 Django 过滤

我有一个 Django 应用程序,需要按位置过滤用户(显示在登录用户给定距离内的用户)。

现在我能够latitude and longitude使用 HTML5捕获登录用户的坐标并将它们保存到Location我的 SQLite 后端的表中。

我有GeoIP2名单与citycountry在我的项目文件夹中,我不知道我该如何使用他们,但他们似乎是一个不错的选择,因为他们采取latlon坐标,并产生出一个位置。

我知道这里有几个选项,例如pointlat 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 python sqlite django django-models

4
推荐指数
1
解决办法
617
查看次数

Django password_reset/done 页面覆盖我的自定义 URL

我正在使用自定义 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)

python django

1
推荐指数
1
解决办法
4058
查看次数