请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

跟用户名是“中文”的用户建立websocket连接报错

老师您好:

    问题描述:

    1. 我的用户创建的时候,有使用中文名字创建如下

https://img1.sycdn.imooc.com//szimg/60385e08097bec4f10760334.jpg

2. 我在私信模块,给用户名是中文的用户建立websocket连接时,报错如下截图

https://img1.sycdn.imooc.com//szimg/60385deb09bc26e415570899.jpg


请问老师这个如何解决?

正在回答 回答被采纳积分+3

3回答

提问者 爱编程的运维 2021-05-02 14:02:43

遗漏补充:

  1. 前端部分,把私信的url由用户名改成pk

    https://img1.sycdn.imooc.com//szimg/608e3f9d099b2c0a11210413.jpg

  2. 后端部分,修改messager/url.py

    https://img1.sycdn.imooc.com//szimg/608e3fcb0934fd7008850255.jpg

    这里原本是username 修改成 pk,正好跟前端的修改对应,获取前端传过来的pk值参数

  3. 后端部分,修改messager/views.py

    https://img1.sycdn.imooc.com//szimg/608e40250994ffc208570291.jpg

    第一个框框的值是后端传给前端的,修改成pk
    第二个框框是,根据前端传来的用户名查询对应的用户,现在修改成通过pk来查询。

0 回复 有任何疑惑可以回复我~
  • 兄弟,我昨天也发现不能中文用户名的情况,具体情况就是:中文用户名可以正常给其他英文用户名的用户发消息,但是反过来不行。根据你的方法我都改成了pk,但不知道是我漏了什么东西,虽然可以实现可以互发消息,但是必须得刷新网页才能出来新消息,搞了几个小时没弄好,今早起来又弄了一会,经过反复debug测试发现问题出在哪了。有个更简单的方法,也不需要改那么多东西。
    
    方法:打开messager/views.py  
    在代码async_to_sync(channel_layer.group_send)(recipient_username, payload)  
    改成 async_to_sync(channel_layer.group_send)(slugify(recipient_username), payload)   
    其实就是把接收方的用户名用slugify转成英文拼接的就可以了
    
    同时希望能有帮助到其他老哥
    回复 有任何疑惑可以回复我~ 2021-07-02 12:04:08
  • 另外再补充:consumer.py里的group_add和group_discard方法里的用户名也需要用slugify转一下
    await self.channel_layer.group_add(slugify(self.scope['user'].username), self.channel_name)
    await self.channel_layer.group_discard(slugify(self.scope['user'].username), self.channel_name)
    回复 有任何疑惑可以回复我~ 2021-07-02 12:16:39
提问者 爱编程的运维 2021-05-02 13:42:03

老师,经过1一个多月的异步编程学习,我今天终于读懂了异步的代码,并且成功的把username修改成Pk

修改如下:

  1. 前端部分修改

    (1)修改base.html文件,修改截图如下
     https://img1.sycdn.imooc.com//szimg/608e32450911a99613460349.jpg

  2. 后端部分修改

    (1) 修改messager/views.py,截图如下:

    https://img1.sycdn.imooc.com//szimg/608e332109d2ca8913940380.jpg





        https://img1.sycdn.imooc.com//szimg/608e3b0b094f634f09300629.jpg

        (2) 修改messager/consumer.py

        https://img1.sycdn.imooc.com//szimg/608e3b770931a09c10680625.jpg


0 回复 有任何疑惑可以回复我~
  • Jack #1
    不错。继续加油!
    回复 有任何疑惑可以回复我~ 2021-05-03 09:59:35
Jack 2021-03-02 10:13:49

您好,这个没法解决。不能使用中文,用用户的ID或者user_id字段,一般用户昵称还有重复的问题

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信